Android:SurfaceView blockiert die Navigationsleiste
-
20-12-2019 - |
Frage
Meine Oberflächenansicht verhindert, dass meine Navigationsleiste angezeigt wird.
Meine Hauptaktivität hat ein Fragment, das seine Inhaltsansicht als Oberflächenansicht festlegt:
getActivity().setContentView(surfaceView);
Dieselbe Hauptaktivität erstellt auch eine Navigationsleiste:
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>
Alle anderen alternativen Ansätze, um eine Navigationsschublade oder eine Navigationsschublade zu erreichen, die gleich aussieht und gleichzeitig eine Oberflächenansicht beibehält, sind willkommen!
Lösung
Wenn Ihr Fragment diese Zeile aufruft: getActivity().setContentView(surfaceView);
, wird das Layout der Aktivität, das das DrawerLayout enthält, nur durch das SurfaceView ersetzt.Das heißt, Ihre Aktivität verfügt nicht mehr über ein DrawerLayout.Ihr Fragment sollte das SurfaceView in sein eigenes Layout laden onCreateView()
.