android android-support-library android-5.0-lollipop android-actionbar-compat

La vista personalizada de la barra de acción de Android no llena el padre



android-support-library android-5.0-lollipop (4)

Similar a la pregunta here , pero tiene algunas diferencias clave. Lo más notable es que la respuesta aceptada funcionó hasta los últimos lanzamientos de la biblioteca de soporte.

Aquí está el diseño de vista personalizado:

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

Ahora, cuando intenta establecer solo la vista personalizada:

ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayShowCustomEnabled(true); actionBar.setCustomView(R.layout.actionbar);

Terminas con un diseño personalizado que no ocupa todo el ancho:

Para que esto esté más interesado, tengo una configuración similar en una aplicación diferente:

ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); actionBar.setCustomView(R.layout.actionbar); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false);

Esto funcionó, hasta que actualicé las bibliotecas de soporte a v21. Una vez que lo hice, terminé con el mismo problema en aplicaciones que anteriormente no tenían ese problema.

Entonces, mi pregunta es, ¿hay una manera de hacer que una barra de acción de vista personalizada llene el ancho utilizando la última biblioteca de soporte?

Editar Después de realizar algunas pruebas más, descubrí que compilar con targetSdkVersion / compileSdkVersion configurado en 19 y tener v7: 19.0.1 (o v7: 19.1.0) para la biblioteca no tiene este problema (tiene el ícono de inicio, que es cuidado con el código posterior), confirmando que esto es definitivamente un problema con la última versión.


1

ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowCustomEnabled(true); actionBar.setDisplayShowTitleEnabled(false); View view = getLayoutInflater().inflate(R.layout.actionbar_title_back, null); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); actionBar.setCustomView(view, layoutParams); Toolbar parent = (Toolbar) view.getParent(); parent.setContentInsetsAbsolute(0, 0);

2 Usar la barra de herramientas

toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(""); mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); mTitle.setText(title); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true);

XML

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:popupBackground="@color/red" app:popupTheme="@style/PopupTheme" app:theme="@style/ToolbarTheme" > <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Toolbar Title" android:textColor="@color/white" android:textSize="17.0sp" /> </android.support.v7.widget.Toolbar> </LinearLayout>


Agrega así en tu método onCreate

ActionBar action = getSupportActionBar(); action.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); Toolbar toolbar=(Toolbar)action.getCustomView().getParent(); toolbar.setContentInsetsAbsolute(0, 0); toolbar.getContentInsetEnd(); toolbar.setPadding(0, 0, 0, 0);


En su código XML agregue estos atributos:

<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/re_app_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:contentInsetEnd="0dp" android:contentInsetLeft="0dp" android:contentInsetRight="0dp" android:contentInsetStart="0dp" app:contentInsetEnd="0dp" app:contentInsetLeft="0dp" app:contentInsetRight="0dp" app:contentInsetStart="0dp">

Se ajustará a todo el ancho de la vista.


use Toolbar parent = (Toolbar) customNav.getParent (); parent.setContentInsetsAbsolute (0, 0); funcionará