Ho usato uno strato di framelayout con uno sfondo semitrasparente per creare una sovrapposizione. Ma questo overlay non blocca gli eventi di tocco per interagire con le viste sottostanti. Come dovrebbe creare una sovrapposizione che blocchi tutti gli eventi tattili?Come creare una sovrapposizione che blocchi gli eventi di tocco nell'interfaccia utente sottostante?
Come creare una sovrapposizione che blocchi gli eventi di tocco nell'interfaccia utente sottostante?
risposta
seguente codice aggiungere sovrapposizione in cima a tutto:
View v1 = new View(this);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
1000,
50,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.OPAQUE);
params.gravity = Gravity.BOTTOM;
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
wm.addView(v1, params);
per bloccare l'evento di tocco o si deve cambiare la bandiera o sotto il codice funzionerà:
protected boolean onTouchEvent (MotionEvent me) {
return true;
}
Per v1 fareste un'importazione:
import android.view.View.OnTouchListener;
quindi impostare le onTouchListener:
v1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
})
se sovrapposizione non viene ottiene i eventi touch poi gli eventi sono passati alla visualizzazione di base, in modo da bloccare evento di tocco in vista di sotto di essa, rendere il vostro overlay tangibile android:clickable="true"
che è grande, lavora per me, grazie – li2
Nizza trucco, ha funzionato per me, grazie –
mettere il pulsante sul set layer.then overlay quel pulsante Android: background = "@ null" è bloccare evento di tocco di vista al di sotto it..hope risolve il problema
Il codice riportato di seguito ha funzionato per me. Ho aggiunto android:clickable="true"
per bloccare gli eventi di tocco ad altre visualizzazioni sottostanti.
Questo è un esempio con ProgressBar all'interno dell'overlay. Se non vuoi il ProgressBar, puoi usare FrameLayout senza di esso.
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progress_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.4"
android:animateLayoutChanges="true"
android:background="@android:color/black"
android:visibility="gone"
android:clickable="true">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
Come ho fatto a non ricordare il tocco ascoltatore? +1 – jvrodrigues