2017-07-28 1 views
0

Je suis nouveau pour le développement Android. J'ai déjà construit mon application sans tiroir de navigation. Maintenant, je veux ajouter un tiroir de navigation qui sera identique pour toutes les activités de mon application. Aidez-moi sur cette question.Comment ajouter un tiroir de navigation sur l'application pré-construite?

+0

aurait manière la plus simple été en utilisant une seule activité avec un NavigationDrawer et en utilisant des fragments pour différents contenus (au lieu de l'ancienne façon d'avoir de nombreuses activités) ... – deHaar

Répondre

0

En supposant que vos activités d'origine étendent 'AppCompatActivity', effectuez l'activité de base comme suit et étendez toutes vos autres activités à 'BaseActivity'. La mise en page BaseActivity contentera DrawaerLayout et un framelayout. Inside BaseActivity ovveride setcontentview méthode et inflat votre disposition d'activité à l'intérieur framelayout.

BaseActivity.Java

public class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 


    private FrameLayout baseLayout; 
    public ActionBarDrawerToggle drawerToggle; 
    public Toolbar toolbar; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.base_layout); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     baseLayout = (FrameLayout) findViewById(R.id.base_view); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view); 
     DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     navigationView.setNavigationItemSelectedListener(this); 
     drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, 0, 0); 
     drawerLayout.addDrawerListener(drawerToggle); 
    } 

    @Override 
    public void setContentView(View view) { 
     if (baseLayout != null) { 
      ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT); 
      baseLayout.addView(view, params); 
     } 
    } 

    @Override 
    public void setContentView(View view, ViewGroup.LayoutParams params) { 
     if (baseLayout != null) { 
      baseLayout.addView(view, params); 
     } 
    } 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     //TODO 
     return false; 
    } 
} 

base_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

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

     <android.support.design.widget.AppBarLayout 
      style="@style/Widget.MyApp.Toolbar.Solid" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
    > 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary"> 


      </android.support.v7.widget.Toolbar> 



     </android.support.design.widget.AppBarLayout> 

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

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="280sp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/base_header" 
     app:menu="@menu/drawer" /> 
</android.support.v4.widget.DrawerLayout> 

base_header.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/nav_header_height" 
    android:background="@drawable/blank" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/nav_header_icon" 
     android:layout_width="50sp" 
     android:layout_height="50sp" 
     android:layout_marginBottom="8dp" 
     android:layout_marginStart="16sp" 
     android:contentDescription="@null" 
     android:src="@mipmap/ic_launcher" 
     app:layout_constraintBottom_toTopOf="@+id/nav_header_title" 
     app:layout_constraintStart_toStartOf="parent" /> 

    <TextView 
     android:id="@+id/nav_header_title" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="16sp" 
     android:layout_marginStart="16sp" 
     android:fontFamily="sans-serif-medium" 
     android:text="@string/app_name" 
     app:layout_constraintBottom_toTopOf="@+id/nav_header_subtitle" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="parent" /> 

    <TextView 
     android:id="@+id/nav_header_subtitle" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="8dp" 
     android:layout_marginEnd="16sp" 
     android:layout_marginStart="16sp" 
     android:fontFamily="sans-serif" 
     android:text="@string/app_name" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="parent" /> 
</android.support.constraint.ConstraintLayout> 

Ajouter drawer.xml dans le dossier "menu" dans vos ressources.

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/icon_home" 
     android:title="Home" /> 


</menu> 
+0

+0

dans le code ci-dessus pl menu et headerLayout partie –

+0

Oh, j'ai utilisé mes valeurs par défaut. Vous pouvez le remplacer par vos valeurs. Faire la mise en page en-tête et tiroir et les ajouter, – Dexter