12

我已切換到Google官方支持庫。現在,我想用一個二級菜單,像這樣一個除法:Android設計支持庫輔助抽屜菜單

Secondary Menu Screenshot

但由於Android是使用菜單吹氣我不知道現在該怎麼辦。我可以添加第二組,但是這些項目的大小相同,並且沒有分隔符。

drawer.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 

     <item 
      android:id="@+id/overview" 
      android:checked="true" 
      android:icon="@drawable/ic_action_dashboard" 
      android:title="@string/drawer_overview" /> 

     <item 
      android:id="@+id/social_evening" 
      android:checked="false" 
      android:icon="@drawable/ic_action_brightness_3" 
      android:title="@string/drawer_social_evening" /> 

     <item 
      android:id="@+id/scouting_games" 
      android:checked="false" 
      android:icon="@drawable/ic_action_landscape" 
      android:title="@string/drawer_scouting_games" /> 

     <item 
      android:id="@+id/olympics" 
      android:checked="false" 
      android:icon="@drawable/ic_action_stars" 
      android:title="@string/drawer_olympics" /> 


     <item 
      android:id="@+id/quizzes" 
      android:checked="false" 
      android:icon="@drawable/ic_action_school" 
      android:title="@string/drawer_quizzes" /> 

    </group> 
</menu> 

MainActivity.java:

package net.sutomaji.freizeitspiele; 

import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 

/** 
* Created by Tom Schneider on 18.06.15 
*/ 

public class MainActivity extends AppCompatActivity { 

    //Defining Variables 
    private Toolbar toolbar; 
    private NavigationView navigationView; 
    private DrawerLayout drawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initializing Toolbar and setting it as the actionbar 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Initializing NavigationView 
     navigationView = (NavigationView) findViewById(R.id.navigation_view); 

     //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

      // This method will trigger on item Click of navigation menu 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 


       //Checking if the item is in checked state or not, if not make it in checked state 
       if(menuItem.isChecked()) menuItem.setChecked(false); 
       else menuItem.setChecked(true);Q 

       //Closing drawer on item click 
       drawerLayout.closeDrawers(); 

       //Check to see which item was being clicked and perform appropriate action 
       switch (menuItem.getItemId()){ 


        //Replacing the main content with ContentFragment Which is our Inbox View; 
        case R.id.overview: 
         Toast.makeText(getApplicationContext(), "Overview Selected", Toast.LENGTH_SHORT).show(); 
         ContentFragment fragment = new ContentFragment(); 
         FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
         fragmentTransaction.replace(R.id.frame,fragment); 
         fragmentTransaction.commit(); 
         return true; 

        // For rest of the options we just show a toast on click 

        case R.id.social_evening: 
         Toast.makeText(getApplicationContext(),"SE Selected",Toast.LENGTH_SHORT).show(); 
         return true; 
        case R.id.scouting_games: 
         Toast.makeText(getApplicationContext(),"SG Selected",Toast.LENGTH_SHORT).show(); 
         return true; 
        case R.id.olympics: 
         Toast.makeText(getApplicationContext(),"OL Selected",Toast.LENGTH_SHORT).show(); 
         return true; 
        case R.id.quizzes: 
         Toast.makeText(getApplicationContext(),"QZ Selected",Toast.LENGTH_SHORT).show(); 
         return true; 
        default: 
         Toast.makeText(getApplicationContext(),"Somethings Wrong",Toast.LENGTH_SHORT).show(); 
         return true; 

       } 
      } 
     }); 

     // Initializing Drawer Layout and ActionBarToggle 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.openDrawer, R.string.closeDrawer){ 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 

       super.onDrawerOpened(drawerView); 
      } 
     }; 

     //Setting the actionbarToggle to drawer layout 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     //calling sync state is necessay or else your hamburger icon wont show up 
     actionBarDrawerToggle.syncState(); 






    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

所以,我怎麼能創造這樣的菜單,或者我如何添加分隔(與類別標題)到我的導航抽屜?

回答

19

您可以使用標準的NavigationView定義這樣一個菜單:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:id="@+id/group1" android:checkableBehavior="single" id> 
     //items of group1 
    </group> 

    <group android:id="@+id/group2" android:checkableBehavior="single" id> 
     //items of group2 
    </group> 

它給一個唯一的ID給每個組是非常重要的。

-1

您可以將任何ViewGroup像LinearLayout一樣用於抽屜。它不限於ListView和FrameLayout。正因爲如此,您可以像任何其他活動佈局一樣調整抽屜視圖的樣式。唯一要記住的是NavigationDrawer只能有兩個孩子。第一個是你的活動佈局,第二個是抽屜。隨意按照你的喜好來設計風格!

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<!-- YOUR DRAWER --> 
<LinearLayout 
    android:id="@+id/drawer_view" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_gravity="start"> 

    <!-- Use any Views you like --> 
    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#ffffff"/> 
</LinearLayout> 
</android.support.v4.widget.DrawerLayout> 

的分頻器

android:divider="#FFFFFF" 
android:dividerHeight="1dp" 
+0

的問題是有針對性地使用NavigationView從充氣菜單一個資源文件 – akohout

2

教程:Navigation View Design Support Library

菜單項:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/navigation_item_attachment" 
      android:checked="true" 
      android:icon="@drawable/ic_attachment" 
      android:title="@string/nav_item_attachment" /> 
     <item 
      android:id="@+id/navigation_item_images" 
      android:icon="@drawable/ic_image" 
      android:title="@string/nav_item_images" /> 
     <item 
      android:id="@+id/navigation_item_location" 
      android:icon="@drawable/ic_place" 
      android:title="@string/nav_item_location" /> 
    </group> 

    <item android:title="@string/nav_sub_menu"> 
     <menu> 
      <item 
       android:icon="@drawable/ic_emoticon" 
       android:title="@string/nav_sub_menu_item01" /> 
      <item 
       android:icon="@drawable/ic_emoticon" 
       android:title="@string/nav_sub_menu_item02" /> 
     </menu> 
    </item> 

</menu> 
0

這裏是你到底在尋找:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 

     <item 
      android:id="@+id/Home" 
      android:checked="false" 
      android:icon="@drawable/ic_home" 
      android:title="@string/homestr" /> 
     <item 
      android:id="@+id/myacc" 
      android:checked="false" 
      android:icon="@drawable/ic_account" 
      android:title="@string/myaccstr" /> 
     <item 
      android:id="@+id/popular" 
      android:checked="false" 
      android:icon="@drawable/ic_star" 
      android:title="@string/Popularstr" /> 

     <item 
      android:id="@+id/newsit" 
      android:checked="false" 
      android:icon="@drawable/ic_news" 
      android:title="@string/newsstr" /> 


     <item android:title="@string/gn"> 
      <menu> 
       <item 
        android:id="@+id/settings" 
        android:checked="false" 
        android:icon="@drawable/ic_setting" 
        android:title="@string/action_settings" /> 
       <item 
        android:id="@+id/help" 
        android:checked="false" 
        android:icon="@drawable/ic_help" 
        android:title="@string/helpstr" /> 

      </menu> 
     </item> 
    </group> 
</menu>