Mi MainActivity.xml es el siguiente:

<?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">

<include
    layout="@layout/app_bar_appbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_appbar"
    app:menu="@menu/activity_appbar_drawer" />

<android.support.design.widget.CoordinatorLayout 
xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_weight="1"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:title="@string/app_name">

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

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.design.widget.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_1" />

            <android.support.design.widget.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_2" />

            <android.support.design.widget.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_3" />

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

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

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >

    </android.support.v4.view.ViewPager>


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

Mi intención es tener una barra de aplicaciones con un cajón de navegación (icono a la izquierda) y un menú de opciones (icono a la derecha). Sin embargo, parece estar atascado debajo del valor predeterminado del sistema. Aquí hay una imagen que muestra su vista previa:

Android Studio Preview

Además, mi styles.xml es:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

Cambiar AppCompat.Light.DarkActionBar a NoActionBar no tiene ningún efecto . La barra de aplicaciones con "AppName" simplemente permanece sobre la otra barra de aplicaciones (que debe mostrar "BEEP" como texto, además de los dos iconos para la barra de navegación y el menú de opciones) - NoActionBar también se define en el manifiesto de la actividad:

    <activity
        android:name=".MainActivity"
        android:label="BEEP"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Aquí está la parte relevante de MainActivity.java, si es necesario:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
   ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
...

Entonces, ¿cómo puedo hacer que se muestre la barra de herramientas (ID es "barra de herramientas") en lugar de la barra de aplicaciones predeterminada que actualmente contiene el texto "AppName" en la imagen de arriba? También seguí esto, sin embargo, no hay cambios en el resultado.

EDITAR 1: La siguiente captura de pantalla muestra mi barra de aplicaciones definida por el usuario que aparece debajo de la predeterminada, por alguna razón. También he incluido mi app_bar_appbar.xml

The appbar named "BEEP" is underneath and can be seen when pulled down, but when scrolling up it is hidden beneath the tab/toolbar.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
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:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

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

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

<include layout="@layout/content_appbar" />

</android.support.design.widget.CoordinatorLayout>
2
Talisman 23 ene. 2018 a las 05:36

3 respuestas

La mejor respuesta

Como tiene Theme.AppCompat.Light.DarkActionBar en su etiqueta Application de AndroidManifest, toda la actividad incluirá la barra de acción predeterminada.

Cree un tema más en su styles.xml con NoActionBar y aplíquelo a su NavigationDrawerActivity.

es decir

<style name="navigation_theme" parent="Theme.AppCompat.Light.NoActionBar"/>

Ajústelo a su actividad de navegación

<activity
            android:name=".NavigationDrawerActivity"
            android:label="@string/title_activity_navigation_drawer"
            android:theme="@style/navigationtheme" />

Example of default theme with ActionBar and NavigationDrawerActivity with Different theme

Ejemplo de tema predeterminado con ActionBar y NavigationDrawerActivity con el tema NoActionBar

EDITAR

Como dijo @Talisman, era el problema con TabLayout y ViewPager of DrawerLayout

<?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">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.and.NavigationDrawerActivity">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@android:color/holo_blue_light"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

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

        <!--Your content in this FrameLayout-->
        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:context="com.and.NavigationDrawerActivity">

        </FrameLayout>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            app:srcCompat="@android:drawable/ic_dialog_email" />

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

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_navigation_drawer"
        app:menu="@menu/activity_navigation_drawer_drawer" />

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

Ahora configure TabLayout y ViewPager en otro Fragmento y cargue ese fragmento en este método FrameLayout en onCreate de NavigationDrawerActivity

 FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction tr = fm.beginTransaction();
        tr.replace(R.id.frame_container, fragment);
        tr.commitAllowingStateLoss();

donde fragmento es otro fragmento que contiene su TabLayout y ViewPager.

2
Dipali s. 25 ene. 2018 a las 07:28

En primer lugar, seleccione "AppTheme" de la vista previa del diseño

enter image description here

Seleccione el tema del proyecto >> AppTheme.NoActionBar

enter image description here

Para crear un menú de opciones para su actividad

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch(item.getItemId()){

        case R.id.menu_item:
          //do need full stuff
        break;

        case R.id.menu_settings:
          //do need full stuff
        break;

    }

}

Crear un menu.xml en res> carpeta de menú

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_item"
        android:title="Item"/>

    <item
        android:id="@+id/menu_settings"
        android:title="Settings" />
</menu>
0
Maddy 25 ene. 2018 a las 05:59

Todo se ve perfecto como debería ser. Si solo desea cambiar el título de la barra de herramientas, solo tiene que agregar algunas líneas de código en MainActivity.java

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
// add few lines here like...
    toolbar.setTitle("Your title here");
// ....   
    setSupportActionBar(toolbar);

Si el menú de opciones correcto no se muestra, anule estos dos métodos en MainActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.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 false;
    }

    return super.onOptionsItemSelected(item);
}
0
Satish Rajbhar 25 ene. 2018 a las 05:24