2016-03-03 4 views
0

Я знаю, как создать меню гамбургеров Android, доступно множество учебных пособий.Как создать меню гамбургера в андроиде простым способом с многоразовым кодом?

Я хочу создать меню гамбургеров в каждом классе, чтобы вызвать один метод в общем классе, у которого есть код меню гамбургера. Также мое меню гамбургера внутри списка с параметрами.

Как создать такое меню гамбургера. Я хочу уменьшить свой код и предоставить код повторного использования другим. Пожалуйста, помогите мне.

+1

Внедрите навигационный ящик в вашем BaseActivi затем продолжите эту деятельность, когда вы хотите создать новую с помощью навигационного ящика http://developer.android.com/training/implementing-navigation/nav-drawer.html – DDsix

+0

таким образом не нужно писать код меню гамбургера в каждый вид деятельности ??? – AndroidStar

+0

... Вы должны прочитать что-то о ООП, наследовании, а затем начать работу над приложениями Android. И чтобы ответить на ваш вопрос, нет. Если вы реализуете что-то в классе, все классы, которые наследуют этот класс, будут иметь эту вещь. – DDsix

ответ

0

Вы должны принять активность и в файле макета, что деятельность поместим следующий код:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:elevation="4dp" 
    android:layout_height="fill_parent" 
    > 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 

     > 
     <include 
      android:id="@+id/tool_bar" 
      layout="@layout/toolbar" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      /> 


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


<put your layout here................> 

     </FrameLayout> 



    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     android:background="@drawable/bg_all" 

     app:itemIconTint="@android:color/white" 
     app:itemTextColor="@android:color/white" 
     app:theme="@style/list_item_appearance" 
     app:menu="@menu/drawer_menu" > 


    </android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

После этого в файле активность:

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     navigationView=(NavigationView)findViewById(R.id.navigation); 
     if (drawerLayout != null) { 
      drawerLayout.setDrawerShadow(R.drawable.list_back, GravityCompat.START); 

      mDrawerToggle = new ActionBarDrawerToggle(HomeActivity.this, drawerLayout, 
        toolbar, R.string.drawer_open, R.string.drawer_close) { 
       public void onDrawerClosed(View view) { 
        super.onDrawerClosed(view); 
        invalidateOptionsMenu(); 
       } 

       public void onDrawerOpened(View drawerView) { 
        getSupportActionBar().setTitle(mDrawerTitle); 
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
        super.onDrawerOpened(drawerView); 

        invalidateOptionsMenu(); 

       } 
      }; 
      drawerLayout.setDrawerListener(mDrawerToggle); 

     } 
@Override 

    protected void onPostCreate(Bundle savedInstanceState) { 

     super.onPostCreate(savedInstanceState); 

     // Sync the toggle state after onRestoreInstanceState has occurred. 

     mDrawerToggle.syncState(); 

    } 


    @Override 

    public void onConfigurationChanged(Configuration newConfig) { 

     super.onConfigurationChanged(newConfig); 

     // Pass any configuration change to the drawer toggles 

     mDrawerToggle.onConfigurationChanged(newConfig); 

    } 

, а затем принять некоторые фрагменты для добавления одно и то же меню навигации в каждом макете и назовите их так:

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); 

       //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.drawer_home: 
         txt_title.setText("Home"); 
         Intent intent=new Intent(HomeActivity.this, HomeActivity.class); 
         startActivity(intent); 
         overridePendingTransition(0, 0); 
         finish(); 
         return true; 

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

        case R.id.drawer_artist: 
         txt_title.setText("Artists"); 
         android.support.v4.app.FragmentManager fragmentManager=getSupportFragmentManager(); 
         android.support.v4.app.FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
         fragmentTransaction.replace(R.id.content_frame, new ArtistsFragment()); 
         fragmentTransaction.addToBackStack(null); 
         fragmentTransaction.commit(); 
         return true; 

        } 
     });