50

Gibt es eine Möglichkeit, sicherzustellen, dass die Navigationsleiste über dem Inhalt des Fragments bleibt?Navigationsschublade - Deaktiviert das Klicken auf Objekte hinter der Lade

Ich habe eine kleine Testanwendung mit Dummy-Daten erstellt. 10 Fragmente mit einer entsprechenden nummerierten Schaltfläche und Textansicht. Das Problem besteht darin, dass die Fragmentelemente eine höhere Priorität als die Navigationsleiste haben.

enter image description here

Wie im Screenshot zu sehen, wenn ich die „0-Fragment“ zu öffnen versuchen, es entscheidet sich stattdessen den Klick auf den Button hinter der Navigationsleiste zu registrieren. Das Drücken eines beliebigen anderen Inhaltselements funktioniert einwandfrei, solange sich keine anderen interagierbaren Elemente darunter befinden. Was kann ich tun, damit die Navigationsleiste über dem Inhalt dahinter bleibt?

+0

DID versuch set actionbar.setNavigationMode (ActionBar.NAVIGATION_MODE_STANDARD); ? – Hruskozrout

Antwort

-1

Nun, ich habe eine Lösung für dieses Problem gefunden. Wenn die Schublade geöffnet wird, können Sie die Navigationsleiste nach vorne bringen, indem Sie bringToFront() - Methode auf dem von Ihnen verwendeten Layout aufrufen. Dadurch wird sichergestellt, dass die Navigationsleiste über dem zugrunde liegenden Inhalt verbleibt, bis ein neues Element ausgewählt wurde.

D.h.:

@Override 
public void onDrawerOpened(View drawerView) 
    { 
    activity.getActionBar().setTitle("Select content"); 
    activity.invalidateOptionsMenu(); 
    drawerLayout.bringToFront(); 
    } 
+0

android: clickable = "true" auf der Schublade Layout ist genug – moondroid

+0

es dint Arbeit für mich – silverFoxA

124

Set android:clickable="true" Tag auf Fenster Layout schieben.

+2

arbeitete perfekt für mich –

+0

danke, mario – vuhung3990

+0

Diese Antwort gespeichert meine Zeit .. :) Arbeit perfekt .... – IshRoid

3

In meiner Fragment-Schublade habe ich TouchListener eingestellt, um True zurückzugeben. Es funktionierte für mich

 mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return true; 
     } 
    }); 
+0

beste Lösung, die angenommene funktionierte nicht für mich. – peresisUser

2

Ich löste es auf eine andere Art und Weise.

Hier ist mein Code der Schublade für die Einrichtung:

/** 
* Setup Navigation Drawer 
*/ 
private void setDrawer() { 
    NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer); 
    mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar); 
} 

die setup Methode in meinem NavigationDrawerFragment ist, hier ist mein Code dafür:

/** 
* Users of this fragment must call this method to set up the navigation drawer interactions. 
* 
* @param fragmentId The android:id of this fragment in its activity's layout. 
* @param drawerLayout The DrawerLayout containing this fragment's UI. 
* @param toolbar  The Toolbar of the activity. 
*/ 
public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
    View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent(); 
    DrawerLayout mDrawerLayout = drawerLayout; 

    //noinspection deprecation 
    mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); 

    ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      if (!isAdded()) return; 

      // Solution: 
      // Disable click event on views below Navigation Drawer 
      mFragmentContainerView.setClickable(false); 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if (!isAdded()) return; 

      // Solution: 
      // Enable click event on views below Navigation Drawer 
      mFragmentContainerView.setClickable(true); 
      getActivity().invalidateOptionsMenu(); 
     } 
    }; 

    // Defer code dependent on restoration of previous instance state. 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mActionBarDrawerToggle.syncState(); 
     } 
    }); 

    //noinspection deprecation 
    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); 
} 

, dass es Ihnen

Verwandte Themen