0

Hallo an alle,Navigationsleiste unter Symbolleiste im Android

Ich bin ein Neuling in Android Programmierung und arbeitet derzeit an einer Praxis-Anwendung, die mehr oder weniger ein Flickenteppich von Tutorial-Codes ist.

Im Moment habe ich Navigation Schublade unter der Symbolleiste. Ich möchte die XML-Hierarchie neu anpassen, damit sie mit der Material Design-Richtlinie konsistent bleibt und die Navigationsleiste über der Symbolleiste hat. Es scheint eine einfache Aufgabe zu sein, aber für mein Leben kann ich es nicht verstehen.

Kann mir jemand Vorschläge machen?

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:apps="http://schemas.android.com/apk/res-auto" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:orientation="vertical" 
 
    android:background="@color/background_color"> 
 

 
    <android.support.v7.widget.Toolbar 
 
     xmlns:android="http://schemas.android.com/apk/res/android" 
 
     android:id="@+id/toolbar" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:background="@color/primary_color" 
 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
 
     apps:title="@string/app_name"/> 
 

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

 
     <FrameLayout 
 
      android:id="@+id/frame_layout" 
 
      android:layout_width="match_parent" 
 
      android:layout_height="match_parent" 
 
      android:orientation="vertical"> 
 
     </FrameLayout> 
 

 
     <android.support.design.widget.NavigationView 
 
      xmlns:android="http://schemas.android.com/apk/res/android" 
 
      xmlns:apps="http://schemas.android.com/apk/res-auto" 
 
      android:id="@+id/navigation_view" 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="match_parent" 
 
      android:layout_gravity="start" 
 
      apps:itemTextColor="#000" 
 
      android:fitsSystemWindows="true" 
 
      apps:headerLayout="@layout/navigation_header" 
 
      apps:menu="@menu/drawer_menu"/> 
 

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

 
</LinearLayout>

package android.dohyun.projectannie; 
 

 
import android.os.Bundle; 
 
import android.support.design.widget.NavigationView; 
 
import android.support.v4.app.FragmentManager; 
 
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.MenuItem; 
 

 
public class MainActivity extends AppCompatActivity { 
 

 
    DrawerLayout mDrawerLayout; 
 
    NavigationView mNavigationView; 
 
    FragmentManager mFragmentManager; 
 
    FragmentTransaction mFragmentTransaction; 
 

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

 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
 
     mNavigationView = (NavigationView) findViewById(R.id.navigation_view); 
 

 

 

 
     mFragmentManager = getSupportFragmentManager(); 
 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 
 
     mFragmentTransaction.replace(R.id.frame_layout, new NotesFragment()).commit(); 
 

 
     mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
 
      @Override 
 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
 
       mDrawerLayout.closeDrawers(); 
 

 
       if(menuItem.getItemId() == R.id.menu_notes) { 
 
        FragmentTransaction fragmentTransactionNotes = mFragmentManager.beginTransaction(); 
 
        fragmentTransactionNotes.replace(R.id.frame_layout, new NotesFragment()).commit(); 
 
       } 
 
       if(menuItem.getItemId() == R.id.menu_folders) { 
 
        FragmentTransaction fragmentTransactionFolders = mFragmentManager.beginTransaction(); 
 
        fragmentTransactionFolders.replace(R.id.frame_layout, new FoldersFragment()).commit(); 
 
       } 
 
       if(menuItem.getItemId() == R.id.menu_trash) { 
 
        FragmentTransaction fragmentTransactionTrash = mFragmentManager.beginTransaction(); 
 
        fragmentTransactionTrash.replace(R.id.frame_layout, new TrashFragment()).commit(); 
 
       } 
 
       if(menuItem.getItemId() == R.id.menu_settings) { 
 
        FragmentTransaction fragmentTransactionSettings = mFragmentManager.beginTransaction(); 
 
        fragmentTransactionSettings.replace(R.id.frame_layout, new SettingsFragment()).commit(); 
 
       } 
 
       if(menuItem.getItemId() == R.id.menu_info) { 
 
        FragmentTransaction fragmentTransactionInfo = mFragmentManager.beginTransaction(); 
 
        fragmentTransactionInfo.replace(R.id.frame_layout, new InfoFragment()).commit(); 
 
       } 
 

 
       return false; 
 
      } 
 
     }); 
 

 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name); 
 

 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
 
     mDrawerToggle.syncState(); 
 

 
    } 
 
}

Der obige Code wird eine leicht modifizierte Version des einen hier, von Ratan geschrieben: https://androidbelieve.com/navigation-drawer-with-swipe-tabs-using-design-support-library/

Antwort

0

DrawerLayout ist ein Sonder FrameLayout, die Navigationsschublade unterstützt.

Die Hauptansicht, die keine layout_gravity hat, ist die Hauptansicht. Die Kindansicht, die eine layout_gravity z. android:layout_gravity="start" ist die Nav-Schublade.

Das bedeutet, dass DrawerLayout die oberste Ansichtsgruppe sein sollte. Mit anderen Worten, setzen Sie Ihr Layout mit der Toolbarinnerhalb der DrawerLayout.