Quero exibir a pesquisa personalizada na actionbar (estou usando ActionBarSherlock para isso).
Eu entendi:
Mas eu quero fazer um layout personalizado (campo de texto de edição) para ocupar toda a largura disponível.
Implementei o layout personalizado conforme sugerido aqui .
Este é o meu layout 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>
E em 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);
Como posso fazer um layout personalizado para ocupar toda a largura disponível actionBar
?
Ajuda por favor.
Respostas:
Existe um truque para isso. Tudo que você precisa fazer é usar em
RelativeLayout
vez deLinearLayout
como o contêiner principal. É importante terandroid:layout_gravity="fill_horizontal"
definido para isso. Isso deve resolver.fonte
Eu mesma lutei contra isso e tentei a resposta de Tomik. No entanto, isso não fez o layout ficar com a largura total disponível no início, apenas quando você adicionasse algo à visualização.
Você precisará definir o
LayoutParams.FILL_PARENT
ao adicionar a visualização:Desta forma, preenche totalmente o espaço disponível. (Você pode precisar usar a solução de Tomik também).
fonte
É assim que funcionou para mim (pelas respostas acima, mostrava tanto o título padrão quanto minha visualização personalizada).
O que notei é que ambos
setCustomView(view)
esetCustomView(view,params)
o pai view width = match / fill. setDisplayShowCustomEnabled (boolean showCustom)fonte
As respostas de Tomik e Peterdk funcionam quando você deseja que sua visualização personalizada ocupe todo o barra de ação, até mesmo ocultando o título nativo.
Mas se você quiser que sua visualização personalizada fique lado a lado com o título (e preencha todo o espaço restante após a exibição do título), posso encaminhá-lo para a excelente resposta do usuário Android-Developer aqui:
https://stackoverflow.com/a/16517395/614880
Seu código, no fundo, funcionou perfeitamente para mim.
fonte
Por exemplo, você pode definir um arquivo de layout que contém um elemento EditText.
você pode fazer
fonte
Há um exemplo no aplicativo inicializador do Android (que fiz uma biblioteca com ele, aqui), dentro da classe que lida com a seleção de papéis de parede ("WallpaperPickerActivity").
O exemplo mostra que você precisa definir um tema personalizado para que isso funcione. Infelizmente, isso funcionou para mim apenas usando a estrutura normal, e não a da biblioteca de suporte.
Aqui estão os temas:
styles.xml
value-v19 / styles.xml
EDITAR: existe uma maneira melhor de fazer isso, que funciona na biblioteca de suporte também. Basta adicionar esta linha de código em vez do que escrevi acima:
fonte