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?
Répondre
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>
dans le code ci-dessus pl menu et headerLayout partie –
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
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