personalizar - como cambiar la barra superior de android
Cajón de navegación de Android en la barra de acción superior (4)
ACTUALIZACIÓN: Cómo superponer la barra de acción con el cajón de navegación. (Con la nueva barra de herramientas) Use estos en sus dependencias en su build.gradle
compile ''com.android.support:appcompat-v7:21.0.0''
compile ''com.android.support:support-v4:21.0.0''
Esto como tu drawerlayout
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/layout_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar"/>
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"/>
</LinearLayout>
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/list_background"
/>
</android.support.v4.widget.DrawerLayout>
Crea un nuevo archivo toolbar.xml en tu carpeta de diseño.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
Accede a tu actividad que amplía el cajón de navegación. y agrega esto después de SetContentView ()
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
No olvide extender su tema NoActionBar en su carpeta de valores.
<style name="Theme.Whtsnxt" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<!-- colorPrimary is used for the default action bar background -->
<item name="windowActionModeOverlay">true</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="colorPrimary">@color/splashscreen</item>
<item name="colorPrimaryDark">@color/holo_blue_light</item>
<item name="android:windowBackground">@color/white</item>
<item name="android:colorBackground">@color/white</item>
</style>
Estoy intentando hacer que el cajón de navegación sobre la barra de acción se deslice hacia la derecha como esta aplicación:
Este es el diseño de mi actividad principal:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
<RelativeLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
...
</RelativeLayout>
<fragment android:name="com...."
android:layout_gravity="start"
android:id="@id/navigation"
android:layout_width="@dimen/navigation_menu_width"
android:layout_height="fill_parent" />
</android.support.v4.widget.DrawerLayout>
Algunas otras preguntas sobre stackoverflow son similares, como esta pregunta, pero se recomienda que todas las respuestas utilicen el menú deslizante lib. Pero esta aplicación todavía usan android.support.v4.widget.DrawerLayout y tienen éxito. No me preguntes cómo sé que usan el cajón de navegación estándar, pero estoy seguro de ello.
Sería realmente apreciado por sus ayudas.
AQUÍ ESTÁ LA SOLUCIÓN FINAL : muchas gracias a @Peter Cai ESTO FUNCIONA PERFECTAMENTE. https://github.com/lemycanh/DrawerOnTopActionBar
He publicado un truco que lo hace posible en versiones anteriores de Android L. Puedes encontrar mi solución en este post . Espero que pueda serle de utilidad a alguien.
Si no desea utilizar una biblioteca o este hack:
- Extiende "Theme.AppCompat.NoActionBar"
- Mueva el primer elemento de su DrawerLayout en un LinearLayout.
Agrega una barra de herramientas a este LinearLayout.
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:minHeight="?attr/actionBarSize" android:layout_width="match_parent" android:layout_height="wrap_content" app:titleTextColor="@android:color/white" android:background="?attr/colorPrimary"> </android.support.v7.widget.Toolbar>
en Actividad, agregue la siguiente línea después de setContentView
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
- Ahora debería funcionar.
Tengo un pequeño "truco" aprendido de https://github.com/jfeinstein10/SlidingMenu para implementar el efecto que requería.
Solo necesita eliminar el primer elemento secundario de la vista de decoración de la ventana y agregar el primer elemento secundario a la vista de contenido del cajón. Después de eso, solo necesita agregar su cajón a la vista de decoración de la ventana.
A continuación hay algunos pasos detallados para que hagas eso.
Primero, crea un xml llamado "decor.xml" o lo que quieras. Solo coloque el DrawerLayout y el cajón. El "FrameLayout" a continuación es solo un contenedor. Lo utilizaremos para envolver el contenido de su actividad.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
<FrameLayout android:id="@+id/container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<fragment android:name="com...."
android:layout_gravity="start"
android:id="@id/navigation"
android:layout_width="@dimen/navigation_menu_width"
android:layout_height="fill_parent" />
</android.support.v4.widget.DrawerLayout>
y luego retire el DrawerLayout en su diseño principal. Ahora el diseño de tu actividad principal debería verse como
<RelativeLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
...
</RelativeLayout>
Asumimos que el diseño de la actividad principal se llama "main.xml".
en su MainActivity, escriba lo siguiente:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Inflate the "decor.xml"
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DrawerLayout drawer = (DrawerLayout) inflater.inflate(R.layout.decor, null); // "null" is important.
// HACK: "steal" the first child of decor view
ViewGroup decor = (ViewGroup) getWindow().getDecorView();
View child = decor.getChildAt(0);
decor.removeView(child);
FrameLayout container = (FrameLayout) drawer.findViewById(R.id.container); // This is the container we defined just now.
container.addView(child);
// Make the drawer replace the first child
decor.addView(drawer);
// Do what you want to do.......
}
Ahora tienes un DrawerLayout que puede deslizarse sobre la barra de acción. Pero podría encontrarlo cubierto por la barra de estado. Es posible que necesite agregar un paddingTop al cajón para solucionarlo.