Je souhaite afficher la recherche personnalisée dans la barre d'action (j'utilise ActionBarSherlock pour cela).
J'ai compris:
Mais je veux faire une mise en page personnalisée (champ edittext) pour occuper toute la largeur disponible.
J'ai implémenté une mise en page personnalisée comme suggéré ici .
Voici ma mise en page personnalisée 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>
Et dans 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);
Comment puis-je créer une mise en page personnalisée pour occuper toute la largeur disponible de actionBar
?
Aidez-moi, s'il vous plaît.
Réponses:
Il y a une astuce pour cela. Tout ce que vous avez à faire est d'utiliser
RelativeLayout
plutôtLinearLayout
que comme conteneur principal. Il est important de s'yandroid:layout_gravity="fill_horizontal"
préparer. Ça devrait le faire.la source
J'ai lutté avec cela moi-même et j'ai essayé la réponse de Tomik. Cependant, cela n'a pas rendu la mise en page pleine largeur disponible au démarrage, uniquement lorsque vous ajoutez quelque chose à la vue.
Vous devrez définir le
LayoutParams.FILL_PARENT
lors de l'ajout de la vue:De cette façon, il remplit complètement l'espace disponible. (Vous devrez peut-être également utiliser la solution de Tomik).
la source
C'est ainsi que cela a fonctionné pour moi (à partir des réponses ci-dessus, il montrait à la fois le titre par défaut et ma vue personnalisée également).
Ce que j'ai remarqué, c'est que les deux
setCustomView(view)
etsetCustomView(view,params)
la largeur de la vue = match / fill parent. setDisplayShowCustomEnabled (booléen showCustom)la source
Les réponses de Tomik et Peterdk fonctionnent lorsque vous souhaitez que votre vue personnalisée occupe toute la barre d'actions, en masquant même le titre natif.
Mais si vous voulez que votre vue personnalisée coïncide avec le titre (et remplisse tout l'espace restant après l'affichage du titre), puis-je vous référer à l'excellente réponse de l'utilisateur Android-Developer ici:
https://stackoverflow.com/a/16517395/614880
Son code au fond a parfaitement fonctionné pour moi.
la source
Par exemple, vous pouvez définir un fichier de mise en page contenant un élément EditText.
tu peux faire
la source
Il y a un exemple dans l'application de lancement d'Android (dont j'en ai fait une bibliothèque, ici), à l'intérieur de la classe qui gère la sélection de fonds d'écran ("WallpaperPickerActivity").
L'exemple montre que vous devez définir un thème personnalisé pour que cela fonctionne. Malheureusement, cela a fonctionné pour moi uniquement en utilisant le framework normal, et non celui de la bibliothèque de support.
Voici les thèmes:
styles.xml
valeur-v19 / styles.xml
EDIT: il existe une meilleure façon de le faire, qui fonctionne également sur la bibliothèque de support. Ajoutez simplement cette ligne de code au lieu de ce que j'ai écrit ci-dessus:
la source