Quiero mostrar la búsqueda personalizada en la barra de acciones (estoy usando ActionBarSherlock para eso).
Lo tengo:
Pero quiero hacer un diseño personalizado (campo de texto de edición) para que ocupe todo el ancho disponible.
Implementé un diseño personalizado como se sugiere aquí .
Ahí está mi diseño personalizado search.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="?attr/actionButtonStyle"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_horizontal"
android:focusable="true" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|fill_horizontal" >
<EditText
android:id="@+id/search_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left|center"
android:background="@drawable/bg_search_edit_text"
android:imeOptions="actionSearch"
android:inputType="text" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:src="@drawable/ic_search_arrow" />
</FrameLayout>
</LinearLayout>
Y en MyActivity
:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_action_search);
LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.search, null);
actionBar.setCustomView(v);
¿Cómo puedo hacer un diseño personalizado para ocupar todo el ancho disponible actionBar
?
Ayuda por favor.
Respuestas:
Hay un truco para esto. Todo lo que tienes que hacer es usarlo en
RelativeLayout
lugar deLinearLayout
como contenedor principal. Es importante haberseandroid:layout_gravity="fill_horizontal"
preparado para ello. Deberias hacer eso.fuente
Luché con esto yo mismo e intenté la respuesta de Tomik. Sin embargo, esto no hizo que el diseño tuviera el ancho completo disponible al inicio, solo cuando agrega algo a la vista.
Deberá configurar el
LayoutParams.FILL_PARENT
al agregar la vista:De esta forma llena completamente el espacio disponible. (Es posible que también deba utilizar la solución de Tomik).
fuente
Así es como funcionó para mí (de las respuestas anteriores, mostraba tanto el título predeterminado como mi vista personalizada también).
Lo que he notado es que tanto
setCustomView(view)
ysetCustomView(view,params)
la vista width = partido / padre de relleno. setDisplayShowCustomEnabled (boolean showCustom)fuente
Las respuestas de Tomik y Peterdk funcionan cuando desea que su vista personalizada ocupe toda la barra de acciones, incluso ocultando el título nativo.
Pero si desea que su vista personalizada viva lado a lado con el título (y llene todo el espacio restante después de que se muestre el título), puedo referirlo a la excelente respuesta del usuario Android-Developer aquí:
https://stackoverflow.com/a/16517395/614880
Su código en la parte inferior funcionó perfectamente para mí.
fuente
Por ejemplo, puede definir un archivo de diseño que contenga un elemento EditText.
tu puedes hacer
fuente
Hay un ejemplo en la aplicación de inicio de Android (que he creado una biblioteca con ella, aquí), dentro de la clase que maneja la selección de fondos de pantalla ("WallpaperPickerActivity").
El ejemplo muestra que debe configurar un tema personalizado para que esto funcione. Lamentablemente, esto funcionó para mí solo usando el marco normal, y no el de la biblioteca de soporte.
Estos son los temas:
styles.xml
valor-v19 / styles.xml
EDITAR: hay una mejor manera de hacerlo, que también funciona en la biblioteca de soporte. Simplemente agregue esta línea de código en lugar de lo que he escrito anteriormente:
fuente