Ich habe eine App mit einer Aktivität erstellt, die eine Navigationsleiste zum Öffnen verschiedener Fragmente verwendet. Ich habe die actionbar drawertoggle, aber sie ist nicht sehr sichtbar ... Wenn ich einen Button in der onCreateView in meinem Hauptfragment (das Fragment, das beim ersten Start meiner App angezeigt wird) platziere, wie kann ich die Navigation dazu bringen Schublade von meiner Aktivität gesteuert?
Das scheint zu funktionieren. Die Antwort ist viel einfacher als ich dachte.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragView = inflater.inflate(R.layout.mainmenu, container, false);
button1 = (Button) fragView.findViewById(R.id.button1);
mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
button1.setOnClickListener(this);
return fragView;
}
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(mDrawerList);
}
Danke für deine Antworten.
wenn Sie die Folie öffnen müssen:
mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
wenn Sie die Folie schließen müssen
mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
BEISPIEL
mein mDrawerLayout ist hier instanziert:
mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);
mein Dia-Status:
mSlideState=false;
wenn Sie den Status des Folienmenüs kennen müssen (geschlossen, geöffnet). Verwenden Sie diesen Code:
mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this,
mDrawerLayout,
R.drawable.ic_menu_slide,
0,
0){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
mSlideState=true;//is Opened
}});
endlich. Sie können Ihr Click-Event folgendermaßen verwenden:
public void clickEventSlide(){
if(mSlideState){
mDrawerLayout.closeDrawer(Gravity.END);
}else{
mDrawerLayout.openDrawer(Gravity.END);
}}
in meinem Fall ist mein Folienmenü auf der rechten Seite (Gravity.END), aber wenn Sie auf der linken Seite benötigen, versuchen Sie es mit Gravity.START
Diese Arbeit für mich, ich hoffe dein Problem gelöst.
wenn Sie die Standardnavigationsaktivität in Android verwenden, müssen Sie nur diesen Code in den Klick-Listener der Schaltfläche ---> einfügen
mDrawerLayout.openDrawer(Gravity.START);
zum Schließen müssen Sie nichts tun.
Um die Symbolleiste als App-Leiste anzuwenden, stellen Sie zunächst sicher, dass Ihre Aktivität von AppCompatActivity ausgeht. Rufen Sie dann setSupportActionBar () auf und übergeben Sie das Toolbar-Objekt aus Ihrem Layout:
toolbar=(Toolbar) findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);
ActionBar actionbar = getSupportActionBar();
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);
drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
else{
super.onBackPressed();
}
}
}
Ich habe eine viel einfachere Lösung mit isDrawerOpen()
.
Die Navigationsleiste wird automatisch geschlossen oder geöffnet (basierend auf dem aktuellen Status der Schublade)
Button hamMenu = findViewById(R.id.ham_menu);
hamMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
// If navigation drawer is not open yet open it else close it.
if(!navDrawer.isDrawerOpen(GravityCompat.START)) navDrawer.openDrawer(Gravity.START);
else navDrawer.closeDrawer(Gravity.END);
}
});
Verwenden Sie das Standard-Callback-Modell wie hier beschrieben:
http://developer.Android.com/training/basics/fragments/communicating.html
Wenn Sie die Taste drücken, initiieren Sie einen Rückruf für die Aktivität und lassen Sie Ihre Schublade öffnen.
Verwenden Sie diese Zeilen, um die Schublade bei einem bestimmten Ereignis zu öffnen und zu schließen:
drawerLayout.openDrawer(Gravity.START);
drawerLayout.closeDrawer(Gravity.LEFT);
→ openDrawer(gravity_of_navigation_view_to_be_shown)
in openDrawer ("Schwerkraft") müssen Sie im Abschnitt "Schwerkraft" die Schwerkraft der Navigationsansicht wie oben angegeben eingeben:
Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END
Ich denke das ist die beste Antwort.