Android:SurfaceView bloque le tiroir de navigation
-
20-12-2019 - |
Question
Ma vue de surface bloque l'apparition de mon tiroir de navigation.
Mon activité principale comporte un fragment qui définit sa vue de contenu comme vue de surface :
getActivity().setContentView(surfaceView);
cette même activité principale crée également un tiroir de navigation :
Java:
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.drawable.ic_navigation_drawer, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset){
drawerLayout.bringChildToFront(drawerView);
drawerLayout.requestLayout();
}
};
drawerLayout.setDrawerListener(actionBarDrawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
XML :
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:background="#00000000"
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<ListView
android:background="#00000000"
android:id="@+id/drawerList"
android:layout_width="320dp"
android:layout_height="match_parent"
android:layout_gravity="left">
</ListView>
</android.support.v4.widget.DrawerLayout>
toute autre approche alternative pour obtenir un tiroir de navigation ou un tiroir de navigation semblable tout en conservant une vue de surface est la bienvenue !
La solution
Lorsque votre Fragment appelle cette ligne : getActivity().setContentView(surfaceView);
, il remplace la mise en page de l'activité contenant le DrawerLayout par uniquement le SurfaceView.Autrement dit, votre activité n’a plus de DrawerLayout.Votre fragment devrait charger le SurfaceView dans sa propre mise en page dans onCreateView()
.