setsupportactionbar getsupportactionbar example empty developer custom bar activity android android-layout android-actionbar

android - getsupportactionbar - setsupportactionbar



Spinner de ancho completo en ActionBar (4)

El control de giro en mi aplicación de Gmail también abarca todo el ancho de mi barra de acción. Esta solución funcionó para mí:

View spinner = getLayoutInflater().inflate(R.layout.actionbar_spinner, null); actionBar.setCustomView(spinner); actionBar.setDisplayShowCustomEnabled(true);

Donde el diseño del hilandero es así:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal" > <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/spinner_text" /> </RelativeLayout>

Sospecho que se puede tener una solución mejor al anular el estilo de navegación predeterminado de la barra de acción, pero no pude hacerlo funcionar de inmediato.

Realmente me gustaría que mi aplicación tuviera un Spinner que se extiende a lo largo de toda mi barra de acción, como la de Gmail 4.0. Alguien sabe como lograr esto? Incluso si configuro "match_parent" en el recurso de diseño de Spinner, no llena toda la barra. Preferiblemente, me gustaría poder llenar la barra completa excepto por mis elementos de acción, en lugar de usar la barra de acción dividida también.

EDITAR : vea mi respuesta a continuación para una implementación que utiliza la barra de acciones integrada, o hankystyles ''cuando se usa una vista personalizada


Intenta establecer el fondo del control de giro en un archivo de imagen. El fondo predeterminado me ha causado problemas de diseño, pero cuando lo puse en mi propio png de un píxel de 1x1 en blanco, llené mi diseño como quería. Si eso funciona, es posible que tengas que crear una imagen personalizada que funcione para ti. Espero que eso ayude.


Si tiene un TextView dentro de su Spinner, puede establecer los minEms en un valor alto. Esta es la solución más fácil que he explorado:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical"> <TextView android:id="@+id/spinner_active" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:text="blaa" android:minEms="100" android:textSize="20sp" /> </LinearLayout>


Poco molesto por haberlo hecho, pero aquí hay un método para hacerlo usando el Spinner integrado en la barra de acción. Todo lo que necesita hacer es hacer que el contenedor principal de su elemento girador sea un RelativeLayout de Disposición y establecer su gravedad en Relleno horizontal, de esta manera:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="fill_horizontal" android:orientation="vertical" > <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginBottom="-4dip" android:text="@string/gen_placeholder" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/TextView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@android:id/text1" android:text="@string/app_name" android:textAppearance="?android:attr/textAppearanceSmall" /> </RelativeLayout>

Y inicializando el adaptador como tal:

ArrayAdapter<CharSequence> barAdapter = new ArrayAdapter<CharSequence>(this, R.layout.subtitled_spinner_item, android.R.id.text1, getResources().getStringArray(R.array.actionList)); barAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

que luego le da al girador requerido que abarca toda la barra de acción (excepto los botones de acción):