He visto en el nuevo diseño de material Lado Nav spec que puede mostrar el cajón de encima de la barra de acción y detrás de la barra de estado. ¿Cómo puedo aplicar esto?

Incluso hoy en día no hay una respuesta clara que funciona con compatibilidad con versiones anteriores. Este tipo de cuestiones son las que realmente molestan a cualquier programador. Ya la promoción de la “N “de la API y muchos conceptos básicos de los aspectos a mejorar en el sistema Android.
Echa un vistazo gadgetsaint.com/android/android-navigation-drawer-toolbar/…

OriginalEl autor Chris Banes | 2014-10-18

10 Comentarios

  1. 520

    Nueva funcionalidad en el marco de apoyo y libs permitir exactamente esto. Hay tres “piezas del rompecabezas’:

    1. Utilizando Barra de herramientas así que puedes integrar tu barra de acción en la vista de jerarquía.
    2. Hacer DrawerLayout fitsSystemWindows por lo que se plantea detrás del sistema de barras.
    3. Desactivación de Theme.Material‘s normal de la barra de estado para colorear para que DrawerLayout puede dibujar ahí en su lugar.

    Voy a asumir que usted tendrá que utilizar el nuevo appcompat.

    Primero, el diseño debería tener este aspecto:

    <!-- The important thing to note here is the added fitSystemWindows -->
    <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <!-- Your normal content view -->
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- We use a Toolbar so that our drawer can be displayed
    in front of the action bar -->
    <android.support.v7.widget.Toolbar  
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />
    <!-- The rest of your content view -->
    </LinearLayout>
    <!-- Your drawer view. This can be any view, LinearLayout
    is just an example. As we have set fitSystemWindows=true
    this will be displayed under the status bar. -->
    <LinearLayout
    android:layout_width="304dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start"
    android:fitsSystemWindows="true">
    <!-- Your drawer content -->
    </LinearLayout>
    </android.support.v4.widget.DrawerLayout>

    A continuación, en su Actividad/Fragmento:

    public void onCreate(Bundled savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Your normal setup. Blah blah ...
    //As we're using a Toolbar, we should retrieve it and set it
    //to be our ActionBar
    Toolbar toolbar = (...) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
    //Now retrieve the DrawerLayout so that we can set the status bar color.
    //This only takes effect on Lollipop, or when using translucentStatusBar
    //on KitKat.
    DrawerLayout drawerLayout = (...) findViewById(R.id.my_drawer_layout);
    drawerLayout.setStatusBarBackgroundColor(yourChosenColor);
    }

    Entonces usted necesita para asegurarse de que el DrawerLayout es visible detrás de la barra de estado. Tú que por el cambio de sus valores-v21 tema:

    values-v21/themes.xml

    <style name="Theme.MyApp" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
    </style>

    Nota:
    Si un <fragment android:name="fragments.NavigationDrawerFragment"> se utiliza en lugar de

    <LinearLayout
    android:layout_width="304dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start"
    android:fitsSystemWindows="true">
    <!-- Your drawer content -->
    </LinearLayout>

    la configuración real, el efecto deseado se logra si se llama fitsSystemWindows(boolean) en una vista que regrese de onCreateView método.

    @Override
    public View onCreateView(LayoutInflater inflater, 
    ViewGroup container,
    Bundle savedInstanceState) {
    View mDrawerListView = inflater.inflate(
    R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setFitsSystemWindows(true);
    return mDrawerListView;
    }
    Sí, la DrawerLayout necesita para ser mostrados detrás del sistema de barras. A continuación, deberá definir en el cajón de la vista de modo que DrawerLayout pone dentro de los márgenes de la ventana.
    No puede conseguir que esto funcione en absoluto. Con el código anterior en una nueva demostración de la aplicación, el resultado es similar a lo que @ScootrNova describe. Ver esta Imagen: imgur.com/QLk3syt
    Parece usted realmente necesita para utilizar un negativo layout_marginTop en el cajón del contenido del diseño de la raíz. De lo contrario, su cajón del contenido de fondo del diseño se dibujan en la parte superior de la barra de estado, y todo lo demás va a ser empujado hacia abajo. Sin embargo, esto parece un poco bruto solución, que yo sepa no hay ninguna ?attr/statusBarSize o algo similar a la proporcionada por Android.
    Para conseguir el efecto de que el cajón es visible a través de la barra de estado, que terminó la configuración de android:fitsSystemWindows a false en el DrawerLayout, android:fitsSystemWindows a la verdad en mi contenido principal de diseño (el diseño que contiene la Barra de herramientas), y la adición de <item name=”android:windowTranslucentStatus”>true</> a mi tema – en Lollipop que es
    Esta respuesta es incompleta. También es necesario envolver el cajón de navegación dentro de un ScrimLayout. Consulte stackoverflow.com/a/26926998/174149

    OriginalEl autor Chris Banes

  2. 136

    EDIT: El nuevo Diseño de la Biblioteca de Soporte apoya este y el anterior método no es necesario.

    Esto puede lograrse mediante la nueva Android Diseño De La Biblioteca De Soporte.

    Se puede ver el Cheesesquare aplicación de muestra por Chris Banes que demos de todas las nuevas características.


    Método anterior:

    Ya que no hay solución completa publicado, aquí es la manera de lograr el resultado deseado.

    Primera incluir un ScrimInsetsFrameLayout en su proyecto.

    /*
    * Copyright 2014 Google Inc.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *     http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    /**
    * A layout that draws something in the insets passed to 
    * {@link #fitSystemWindows(Rect)}, i.e. the area above UI chrome
    * (status and navigation bars, overlay action bars).
    */
    public class ScrimInsetsFrameLayout extends FrameLayout {
    private Drawable mInsetForeground;
    private Rect mInsets;
    private Rect mTempRect = new Rect();
    private OnInsetsCallback mOnInsetsCallback;
    public ScrimInsetsFrameLayout(Context context) {
    super(context);
    init(context, null, 0);
    }
    public ScrimInsetsFrameLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs, 0);
    }
    public ScrimInsetsFrameLayout(
    Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context, attrs, defStyle);
    }
    private void init(Context context, AttributeSet attrs, int defStyle) {
    final TypedArray a = context.obtainStyledAttributes(attrs,
    R.styleable.ScrimInsetsView, defStyle, 0);
    if (a == null) {
    return;
    }
    mInsetForeground = a.getDrawable(
    R.styleable.ScrimInsetsView_insetForeground);
    a.recycle();
    setWillNotDraw(true);
    }
    @Override
    protected boolean fitSystemWindows(Rect insets) {
    mInsets = new Rect(insets);
    setWillNotDraw(mInsetForeground == null);
    ViewCompat.postInvalidateOnAnimation(this);
    if (mOnInsetsCallback != null) {
    mOnInsetsCallback.onInsetsChanged(insets);
    }
    return true; //consume insets
    }
    @Override
    public void draw(Canvas canvas) {
    super.draw(canvas);
    int width = getWidth();
    int height = getHeight();
    if (mInsets != null && mInsetForeground != null) {
    int sc = canvas.save();
    canvas.translate(getScrollX(), getScrollY());
    //Top
    mTempRect.set(0, 0, width, mInsets.top);
    mInsetForeground.setBounds(mTempRect);
    mInsetForeground.draw(canvas);
    //Bottom
    mTempRect.set(0, height - mInsets.bottom, width, height);
    mInsetForeground.setBounds(mTempRect);
    mInsetForeground.draw(canvas);
    //Left
    mTempRect.set(
    0, 
    mInsets.top, 
    mInsets.left, 
    height - mInsets.bottom);
    mInsetForeground.setBounds(mTempRect);
    mInsetForeground.draw(canvas);
    //Right
    mTempRect.set(
    width - mInsets.right, 
    mInsets.top, width, 
    height - mInsets.bottom);
    mInsetForeground.setBounds(mTempRect);
    mInsetForeground.draw(canvas);
    canvas.restoreToCount(sc);
    }
    }
    @Override
    protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    if (mInsetForeground != null) {
    mInsetForeground.setCallback(this);
    }
    }
    @Override
    protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    if (mInsetForeground != null) {
    mInsetForeground.setCallback(null);
    }
    }
    /**
    * Allows the calling container to specify a callback for custom 
    * processing when insets change (i.e. when {@link #fitSystemWindows(Rect)}
    * is called. This is useful for setting padding on UI elements 
    * based on UI chrome insets (e.g. a Google Map or a ListView). 
    * When using with ListView or GridView, remember to set
    * clipToPadding to false.
    */
    public void setOnInsetsCallback(OnInsetsCallback onInsetsCallback) {
    mOnInsetsCallback = onInsetsCallback;
    }
    public static interface OnInsetsCallback {
    public void onInsetsChanged(Rect insets);
    }
    }

    A continuación, crear un styleable para que el insetForeground se puede establecer.

    values/attrs.xml

    <declare-styleable name="ScrimInsetsView">
    <attr name="insetForeground" format="reference|color" />
    </declare-styleable>

    Actualización de su actividad xml del archivo y asegúrese de que android:fitsSystemWindows se establece en true en el DrawerLayout así como la ScrimInsetsFrameLayout.

    layout/activity_main.xml

    <android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">
    <!-- The main content view -->
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- Your main content -->
    </LinearLayout>
    <!-- The navigation drawer -->
    <com.example.app.util.ScrimInsetsFrameLayout 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scrimInsetsFrameLayout"
    android:layout_width="320dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/white"
    android:elevation="10dp"
    android:fitsSystemWindows="true"
    app:insetForeground="#4000">
    <!-- Your drawer content -->
    </com.example.app.util.ScrimInsetsFrameLayout>
    </android.support.v4.widget.DrawerLayout>

    Dentro del método onCreate de la actividad del conjunto de la barra de estado de color de fondo en la bandeja de presentación.

    MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //...
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    mDrawerLayout.setStatusBarBackgroundColor(
    getResources().getColor(R.color.primary_dark));
    }

    Finalmente la actualización de la aplicación del tema a fin de que el DrawerLayout está detrás de la barra de estado.

    values-v21/styles.xml

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    Resultado:

    ¿Cómo puedo usar DrawerLayout a la pantalla a través de la ActionBar/Barra de herramientas y debajo de la barra de estado?

    Esto funciona mejor para mí. Pasé 2 días para conseguir que esto funcione y este es el uno. Este debe ser marcado como Respuesta. Muchas gracias.
    No estoy utilizando appcompat y esto no funciona. 🙁 Hay alguna guía para este trabajo sin appcompat?
    Esta es la más perfecta respuesta. He implementado y probado en varios dispositivos Android de 4.X 5.X y puedo confirmar que funciona perfectamente. Muchas gracias.
    Como ya he dicho, funciona perfectamente, pero tengo un pequeño problema. La actividad con el Cajón de Navegación tiene la transparencia de la barra de estado, pero todas las demás actividades que han perdido la “primaryDark” color de la barra de estado. Cómo conseguir que la parte posterior?
    Me tomó tres días para aceptar que actualmente no existe otro camino que el uso de este diseño adicionales envuelto alrededor del cajón fragmento. De lo contrario, la barra de estado será gris (primer hijo del color de fondo) o el cajón se muestra debajo de la barra de estado.

    OriginalEl autor Suyash

  3. 94

    Con el lanzamiento de la última Android Support Library (rev 22.2.0) tenemos un El Diseño De La Biblioteca De Soporte y como parte de una nueva vista llamada La vista denavegación. Así que en lugar de hacer todo por nosotros mismos con la ScrimInsetsFrameLayout y todas las otras cosas que simplemente utilizar este punto de vista y todo está hecho para nosotros.

    Ejemplo

    Paso 1

    Agregar el Design Support Library a su build.gradle archivo

    dependencies {
    //Other dependencies like appcompat
    compile 'com.android.support:design:22.2.0'
    }

    Paso 2

    Agregar el NavigationView a su DrawerLayout:

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"> <!-- this is important -->
    <!-- Your contents -->
    <android.support.design.widget.NavigationView
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:menu="@menu/navigation_items" /> <!-- The items to display -->
    </android.support.v4.widget.DrawerLayout>

    Paso 3

    Crear un nuevo menú de los recursos en /res/menu y agregar los elementos y de los iconos que desea mostrar:

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
    <item
    android:id="@+id/nav_home"
    android:icon="@drawable/ic_action_home"
    android:title="Home" />
    <item
    android:id="@+id/nav_example_item_1"
    android:icon="@drawable/ic_action_dashboard"
    android:title="Example Item #1" />
    </group>
    <item android:title="Sub items">
    <menu>
    <item
    android:id="@+id/nav_example_sub_item_1"
    android:title="Example Sub Item #1" />
    </menu>
    </item>
    </menu>

    Paso 4

    Init la vista denavegación y manejar los eventos de clic:

    public class MainActivity extends AppCompatActivity {
    NavigationView mNavigationView;
    DrawerLayout mDrawerLayout;
    //Other stuff
    private void init() {
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {
    mDrawerLayout.closeDrawers();
    menuItem.setChecked(true);
    switch (menuItem.getItemId()) {
    case R.id.nav_home:
    //TODO - Do something
    break;
    //TODO - Handle other items
    }
    return true;
    }
    });
    }
    }

    Paso 5

    Asegúrese de establecer android:windowDrawsSystemBarBackgrounds y android:statusBarColor en values-v21 de lo contrario su Cajón no se puede mostrar “bajo” de la barra de Estado

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Other attributes like colorPrimary, colorAccent etc. -->
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    Paso Opcional

    Agregar un Encabezado a la vista denavegación. Para esto basta con crear un nuevo diseño y agregar app:headerLayout="@layout/my_header_layout" a la vista denavegación.

    Resultado

    ¿Cómo puedo usar DrawerLayout a la pantalla a través de la ActionBar/Barra de herramientas y debajo de la barra de estado?

    Notas

    • La resaltado de color utiliza el color definido a través de los colorPrimary atributo
    • La Elementos de la Lista de utilizar el color definido a través de los textColorPrimary atributo
    • La Iconos utilizar el color definido a través de los textColorSecondary atributo

    También puede comprobar el aplicación de ejemplo por Chris Banes que pone de relieve la vista denavegación junto con el resto de los nuevos puntos de vista que forman parte del Diseño de la Biblioteca de Soporte (como el FloatingActionButton, TextInputLayout, Chiringuito, TabLayout etc.)

    gracias @revés!!. > Si desea actualizar cada artículo y el icono en la lista de los archivos de estilo, puede hacerlo mediante: <item name="itemTextColor">@color/YOUR_COLOR</item> <item name="itemIconTint">@color/YOUR_COLOR</item>
    Esto debe ser aceptado respuesta, gran trabajo
    Este enfoque todavía produce la vista denavegación que está detrás de la ActionBar.
    por supuesto, usted tiene que utilizar un Toolbar – no hay manera de hacer esto con un ActionBar
    Simplemente llame a mDrawerLayout.openDrawer(GravityCompat.START); dondequiera que usted desee. Si usted está usando un ActionBarDrawerToggle esto debe hacerse de forma automática tan pronto como usted haga clic en el icono de la hamburguesa.

    OriginalEl autor reVerse

  4. 6

    Hacer que funcione, en valores-v21 estilos o tema xml necesita para utilizar este atributo:

    <item name="android:windowTranslucentStatus">true</item>

    Que hacen que la magia!

    Esto hace que mi actionbar aparecer detrás de la barra de estado así.
    Pero ese es el efecto que estamos tratando de lograr, buscar en el Gmail 5.0 de la aplicación? Se muestra la Barra Lateral detrás de la barra de estado.
    Que no es lo que quería decir. A pesar de la navegación cajón está detrás de la barra de estado con esta línea de código, así que es la barra de herramientas/actionbar.
    El cartel y la contestadora es un empleado de Google que diseñó AppCompat, así que estoy bastante seguro de que él sabía lo que estaba haciendo cuando él escribió el contenido.
    Usted puede configurar android:fitsSystemWindows=”true” para que su contenido normal de la vista (si se toma la aceptación de respuesta de diseño, por ejemplo). Se puede trabajar, incluso para Android 4.4. Pero hay una ligera diferencia: En Android 5.0 el nivel de transparencia en la barra de estado es algo más alto (mayor valor de alfa) que la de GMail, haciendo que la barra de estado aún más oscuro.

    OriginalEl autor Nicolas Jafelle

  5. 6

    El por encima de todos los enfoques son correctos y pueden trabajar . He creado una demo del siguiente de la guía anterior y probado en 2.x 5.x

    Puede clonar desde Github

    Lo importante para jugar es la Actividad Principal de

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    res = this.getResources();
    this.setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    ScrimInsetsFrameLayout scrimInsetsFrameLayout = (ScrimInsetsFrameLayout)
    findViewById(R.id.linearLayout);
    scrimInsetsFrameLayout.setOnInsetsCallback(this);
    } 

    y la llamada de vuelta

    @Override
    public void onInsetsChanged(Rect insets) {
    Toolbar toolbar = this.toolbar;
    ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
    toolbar.getLayoutParams();
    lp.topMargin = insets.top;
    int top = insets.top;
    insets.top += toolbar.getHeight();
    toolbar.setLayoutParams(lp);
    insets.top = top; //revert
    }

    Absolutamente el Tema para V21 hace la magia

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- API 21 theme customizations can go here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/accent_material_light</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
    </style>

    y la ScrimInsetsFrameLayout

    Ahora esto más fácil con la nueva El diseño de la biblioteca de Soporte

    compile 'com.android.support:design:22.2.0'

    clon de @Chris Banes
    https://github.com/chrisbanes/cheesesquare

    OriginalEl autor Vipin Sahu

  6. 4

    Todas las respuestas que se mencionan aquí son demasiado viejos y largos.La mejor y corto solución que funcionar con la última vista denavegación es

    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
    super.onDrawerSlide(drawerView, slideOffset);
    try {
    //int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    //Do something for lollipop and above versions
    Window window = getWindow();
    //clear FLAG_TRANSLUCENT_STATUS flag:
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //finally change the color to any color with transparency
    window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDarktrans));}
    } catch (Exception e) {
    Crashlytics.logException(e);
    }
    }

    esto va a cambiar la barra de estado de color a transparente cuando se abra el cajón

    Ahora cuando se cierra el cajón que usted necesita para cambiar la barra de estado de color de nuevo a la oscuridad.Así que usted puede hacerlo de esta manera.

            public void onDrawerClosed(View drawerView) {
    super.onDrawerClosed(drawerView);
    try {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    //Do something for lollipop and above versions
    Window window = getWindow();
    //clear FLAG_TRANSLUCENT_STATUS flag:
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //finally change the color again to dark
    window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));}
    } catch (Exception e) {
    Crashlytics.logException(e);
    }
    }

    y, a continuación, en el principal diseño de añadir una sola línea yo.e

                android:fitsSystemWindows="true"

    y su cajón de diseño se verá como

                <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:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    y su vista de navegación se verá como

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

    Yo lo he probado y su pleno funcionamiento.Espero que ayude a alguien.Esto puede no ser el mejor método, pero funciona sin problemas y es muy sencillo de implementar.
    Marca si no la ayuda.Feliz codificación 🙂

    Alternativamente, si usted está utilizando una vista personalizada en el ActionBar, se podría establecer la vista personalizada visibilidad del INVISIBLE, en onDrawerSlide() y VISIBLE en onDrawerClosed().

    OriginalEl autor Harry Sharma

  7. 3

    Estoy Utilizando el Diseño de la Biblioteca de Soporte. Y sólo mediante el uso de tema personalizado he logrado transparente la Barra de Estado cuando Abrió el Cajón de Navegación.

    ¿Cómo puedo usar DrawerLayout a la pantalla a través de la ActionBar/Barra de herramientas y debajo de la barra de estado?

    ¿Cómo puedo usar DrawerLayout a la pantalla a través de la ActionBar/Barra de herramientas y debajo de la barra de estado?

    <style name="NavigationStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primaryColor</item>
    <item name="colorPrimaryDark">@color/primaryColorDark</item>
    <!-- To Make Navigation Drawer Fill Status Bar and become Transparent Too -->
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    Por último, añade el tema en el Archivo de Manifiesto

    <activity
    ........
    ........
    android:theme="@style/NavigationStyle"> 
    </activity>

    No te olvides de utilizar la propiedad, android:fitsSystemWindows="true" en “DrawerLayout”

    cómo utilizar esta api de nivel 19 dispositivos ?

    OriginalEl autor katwal-Dipak

  8. 2

    Este es el más simple, y a mí me funcionó:

    En los valores-21:

    <resources>
    <style name="AppTheme" parent="AppTheme.Base">
    ...
    <item name="android:windowTranslucentStatus">true</item>
    </style>
    <dimen name="topMargin">25dp</dimen>
    </resources>

    Los valores:

    <resources>
    <dimen name="topMargin">0dp</dimen>
    </resources>

    Y a su barra de herramientas

    android:layout_marginTop="@dimen/topMargin"
    También hice esto, y trabajó como un encanto en Lollipop. Pero he usado 24dp para el margen superior.
    Cuando se divide la pantalla en los dispositivos con Android 7.1 se puede ver esta brecha en la parte superior si la aplicación es la segunda parte de la pantalla.

    OriginalEl autor Nicolás López

  9. 1

    Lugar de utilizar el ScrimInsetsFrameLayout … ¿no es más fácil agregar una vista con una altura fija de 24dp y un fondo de primaryColor?

    Entiendo que esto implica la adición de un maniquí de vista de la jerarquía, pero parece que el limpiador de mí.

    Yo ya lo probé y funciona bien.

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_base_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- THIS IS THE VIEW I'M TALKING ABOUT... -->
    <View
    android:layout_width="match_parent"
    android:layout_height="24dp"
    android:background="?attr/colorPrimary" />
    <android.support.v7.widget.Toolbar
    android:id="@+id/activity_base_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="2dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark" />
    <FrameLayout
    android:id="@+id/activity_base_content_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
    </LinearLayout>
    <fragment
    android:id="@+id/activity_base_drawer_fragment"
    android:name="com.myapp.drawer.ui.DrawerFragment"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:elevation="4dp"
    tools:layout="@layout/fragment_drawer" />
    </android.support.v4.widget.DrawerLayout>
    Cuando se divide la pantalla en los dispositivos con Android 7.1 se puede ver esta brecha en la parte superior si la aplicación es la segunda parte de la pantalla.

    OriginalEl autor mato

  10. 0

    Probar con este:

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_layout"
    android:fitsSystemWindows="true">
    <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--Main layout and ads-->
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <FrameLayout
    android:id="@+id/ll_main_hero"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">
    </FrameLayout>
    <FrameLayout
    android:id="@+id/ll_ads"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <View
    android:layout_width="320dp"
    android:layout_height="50dp"
    android:layout_gravity="center"
    android:background="#ff00ff" />
    </FrameLayout>
    </LinearLayout>
    <!--Toolbar-->
    <android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/toolbar"
    android:elevation="4dp" />
    </FrameLayout>
    <!--left-->
    <ListView
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@null"
    android:background="@mipmap/layer_image"
    android:id="@+id/left_drawer"></ListView>
    <!--right-->
    <FrameLayout
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:background="@mipmap/layer_image">
    <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@mipmap/ken2"
    android:scaleType="centerCrop" />
    </FrameLayout>

    estilo :

    <style name="ts_theme_overlay" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/red_A700</item>
    <item name="colorPrimaryDark">@color/red1</item>
    <item name="android:windowBackground">@color/blue_A400</item>
    </style>

    Actividad principal se extiende ActionBarActivity

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

    Ahora usted puede onCreateOptionsMenu como normal ActionBar con la Barra de herramientas.

    Este es mi Diseño,

    • ARRIBA: a la Izquierda de Cajón – Cajón de la Derecha
      • MEDIA: de la Barra de herramientas (ActionBar)
      • INFERIOR: ListFragment

    Espero que entiendan !divertirse !

    OriginalEl autor Son Nguyen Thanh

Dejar respuesta

Please enter your comment!
Please enter your name here