studio personalizar para paletas paleta navegacion librerias hexadecimal diseƱo colores color codigo barra android android-actionbar appcompat android-appcompat android-5.0-lollipop

personalizar - Android Lollipop, la vista personalizada de AppCompat ActionBar no ocupa todo el ancho de la pantalla



paletas de colores android studio (8)

Creo que también puedes hacerlo en estilos. prueba esto. probado en kitkat

<style name="AppTheme" parent="Theme.AppCompat"> <item name="toolbarStyle">@style/AppThemeToolbar</item> </style> <style name="AppThemeToolbar" parent="Widget.AppCompat.Toolbar" > <item name="contentInsetStart">0dp</item> </style>

Entonces, acabo de actualizar mi base de código a Lollipop, y tengo problemas con la Barra de acciones. Estoy usando AppCompat y ActionBarActivity, y estoy inflando una vista personalizada. Parece que la vista personalizada ya no ocupa todo el ancho de la pantalla, dejando una tira delgada a la izquierda

Cómo solía verse

Cómo se ve ahora

Este es el código que estoy usando para configurar la barra de acción. ¿Alguien tiene alguna idea?

final ActionBar actionBar = getSupportActionBar(); if(actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowCustomEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setCustomView(R.layout.action_bar_content_search_custom_view); actionBar.setBackgroundDrawable(null); // actionBar.setStackedBackgroundDrawable(null); TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_title); title.setText(R.string.youtube); ImageView back = (ImageView) actionBar.getCustomView().findViewById(R.id.action_bar_back); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); }

Editar

Eliminar la vista personalizada y cambiar el fondo ahora ocupa todo el ancho. Entonces, el problema es, ¿cómo podemos hacer que CustomView ocupe todo el ancho de ActionBar?


Después de mucho golpearme la cabeza contra el monitor, esto funcionó para mí

Toolbar toolbar = (Toolbar) actionBar.getCustomView().getParent(); toolbar.setContentInsetStartWithNavigation(0); toolbar.setContentInsetEndWithActions(0); toolbar.setContentInsetsAbsolute(0, 0); toolbar.setPadding(0, 0, 0, 0);

GetCustomView (). GetParent () es lo que hizo el truco


En lugar de hacer tanto trabajo como mencionó Muzikant y me gusta esta respuesta

getSupportActionBar().setDisplayShowHomeEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE)); LayoutInflater mInflater = LayoutInflater.from(this); View mCustomView = mInflater.inflate(R.layout.action_bar_home, null); getSupportActionBar().setCustomView(mCustomView); getSupportActionBar().setDisplayShowCustomEnabled(true); Toolbar parent =(Toolbar) mCustomView.getParent();//first get parent toolbar of current action bar parent.setContentInsetsAbsolute(0,0);// set padding programmatically to 0dp

Debe agregar solo las dos últimas líneas de código para resolver su problema.

Espero que esto pueda ayudarte a ti y a cualquier otra persona.

ACTUALIZACIÓN: Después de investigar un poco al respecto, descubrí que esta solución no funcionará en algunos casos. El espacio lateral izquierdo (INICIO o ATRÁS) se eliminará con esto, pero el espacio lateral derecho (MENÚ) permanecerá como está. A continuación se muestra la solución en estos casos.

View v = getSupportActionBar().getCustomView(); LayoutParams lp = v.getLayoutParams(); lp.width = LayoutParams.MATCH_PARENT; v.setLayoutParams(lp);

Agregue estas cuatro líneas al código anterior, de modo que el espacio lateral derecho también se elimine de la barra de acción de soporte.


Escriba estas dos líneas además de su código

Toolbar toolbar=(Toolbar)viewActionBar.getParent(); toolbar.setContentInsetsAbsolute(0,0);


Ninguna de las otras respuestas funcionó para mí, así que eché un vistazo a los estilos reales de AppCompat v7, que se encuentran here .

Si observa el estilo Base.Widget.AppCompat.ActionBar, tiene:

<item name="contentInsetStart">@dimen/abc_action_bar_content_inset_material</item> <item name="contentInsetEnd">@dimen/abc_action_bar_content_inset_material</item>

Entonces, obviamente, solo tenemos que anular esas propiedades en nuestro propio estilo de barra de acción:

<style name="ActionBar" parent="@style/Base.Widget.AppCompat.ActionBar"> <item name="contentInsetStart">0dp</item> <item name="contentInsetEnd">0dp</item> </style>

Esto funcionó muy bien para mí, espero que también ayude a otros.


Parece que esto es causado por los últimos cambios en ActionBar en la appcompat-v7 reciente de appcompat-v7 . Parece que hay cambios significativos en cómo debe manejar las barras de acción.

Me enfrenté al mismo problema y después de leer la documentación de ActionBar , y especialmente la siguiente cita, encontré una solución.

A partir de Android L (API nivel 21), la barra de acción puede estar representada por cualquier widget de barra de herramientas dentro del diseño de la aplicación. La aplicación puede indicar a la actividad qué barra de herramientas debe tratarse como la barra de acción de la actividad. Las actividades que usan esta función deben usar uno de los temas .NoActionBar suministrados, establecer el atributo windowActionBar en falso o de lo contrario no solicitar la función de ventana.

A mi modo de ver, los temas de AppCompat cambiaron y, por un lado, parecían romper algunas cosas, pero por otro lado, proporcionaban mucha más flexibilidad. Recomiendo seguir estos pasos:

  1. Use el estilo .NoActionBar en su actividad como se describe en la cita anterior
  2. Agregue un android.support.v7.widget.Toolbar a su diseño de Actividad
  3. Establezca la app:contentInsetStart="0dp" atributo. Este es el problema principal con el margen que describe en su pregunta

<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/actionBar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentInsetEnd="0dp" app:contentInsetStart="0dp" > </android.support.v7.widget.Toolbar>

Por lo general, se recomienda que lo haga en un archivo de diseño separado y use include en el diseño de su actividad, por lo que solo necesitará personalizar la barra de herramientas en un lugar si se usa en múltiples actividades

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

  1. Use findViewById y setSupportActionBar en su Activity onCreate para signal to the Activity which Toolbar should be treated as the Activity''s action bar

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

  1. Una vez que haga eso, todas las acciones agregadas en onCreateOptionsMenu se agregarán a la barra de herramientas y se tratarán como la barra de acción.
  2. Personalice aún más la barra de herramientas como desee (Agregar vistas secundarias, etc.)

También encontré este problema hoy, luego descubrí que tenía res/values-v21/styles.xml dentro de mi proyecto, que fue generado automáticamente por Android Studio y esa es la causa.

¿Por qué?

Porque el contenido de mi res/values-v21/styles.xml era:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="BaseAppTheme" parent="android:Theme.Material.Light"> </style> </resources>

Y mi res/values/styles.xml contenía algo como:

<style name="BaseAppTheme" parent="android:Theme.Holo.Light"> <!-- Customize your theme here. --> <item name="android:windowContentOverlay">@null</item> <item name="android:soundEffectsEnabled">false</item> </style>

Luego, cuando ejecuté mi aplicación en Lollipop, se utilizó res/values-v21/styles.xml , y eso causó el problema exacto que tenía OP. Así que llegué a una solución simple, solo estoy eliminando:

<style name="BaseAppTheme" parent="android:Theme.Material.Light"> </style>

en res/values-v21/styles.xml


al punto:

ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); actionBar.setCustomView(R.layout.actionbar_layout); Toolbar toolbar = (Toolbar) actionBar.getCustomView().getParent(); toolbar.setContentInsetsAbsolute(0, 0); toolbar.setPadding(0, 0, 0, 0);

asegúrese de importar la barra de herramientas correcta: android.support.v7.widget.Toolbar;