Comment faire pour afficher la vue personnalisée dans l'ActionBar?
Je veux afficher de la recherche personnalisée dans l'actionbar (je suis en utilisant ActionBarSherlock pour ça).
J'ai eu ça:
Mais je veux faire la mise en page personnalisée (edittext) afin de mettre en occupent toute la largeur disponible.
J'ai mis en œuvre la mise en page personnalisée, comme l'a suggéré ici.
Il y a 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 faire la mise en page personnalisée à occuper toute la largeur disponible de actionBar
?
Aider, s'il vous plaît.
- Êtes-vous en mesure de définir le titre avec vue personnalisée définie?
InformationsquelleAutor Sabre | 2012-10-14
Vous devez vous connecter pour publier un commentaire.
Il y a un truc pour ça. Tout ce que vous avez à faire est d'utiliser
RelativeLayout
au lieu deLinearLayout
que le conteneur principal. Il est important d'avoirandroid:layout_gravity="fill_horizontal"
défini. Cela devrait le faire.J'ai lutté avec moi-même, et essayé Tomik de réponse.
Cependant, cela ne l'a pas fait la mise en page pleine largeur disponible sur démarrer, uniquement lorsque vous ajouter quelque chose à la vue.
Vous aurez besoin de définir les
LayoutParams.FILL_PARENT
lors de l'ajout de la vue:De cette manière, il remplit complètement l'espace disponible. (Vous devrez peut-être utiliser Tomik la solution de trop).
Les réponses de Tomik et Peterdk travailler quand vous le voulez votre vue personnalisée pour occuper l'ensemble de la barre d'action, même cacher le native title.
Mais si vous voulez que votre vue personnalisée pour vivre côte-à-côte avec le titre (et le remplir tout l'espace restant après le titre est affiché), puis je peux vous référer à l'excellente réponse de l'utilisateur Android Developer ici:
https://stackoverflow.com/a/16517395/614880
Son code en bas a fonctionné parfaitement pour moi.
C'est la façon dont il a travaillé pour moi (à partir des réponses ci-dessus, il a été montrant à la fois les titre par défaut et personnalisés mon point de vue aussi).
Ce que j'ai remarqué est que les deux
setCustomView(view)
etsetCustomView(view,params)
le point de vue de la largeur=match/remplir parent. setDisplayShowCustomEnabled (boolean showCustom)Par exemple, vous pouvez définir un fichier de configuration qui contient un EditText élément.
vous pouvez faire
Il y a un exemple dans le lanceur d'application d'Android (que j'ai fait une bibliothèque, ici), à l'intérieur de la classe qui gère les fonds d'écran-picking ("WallpaperPickerActivity") .
Le montre l'exemple que vous avez besoin de définir un thème personnalisé pour que cela fonctionne. Malheureusement, cela a fonctionné pour moi, seulement à l'aide du cadre normal, et non pas celui de la bibliothèque de prise en charge.
Voici les thèmes:
styles.xml
value-v19/styles.xml
EDIT: il y a une meilleure façon de le faire, qui travaille sur la bibliothèque de prise en charge trop. Il suffit d'ajouter cette ligne de code au lieu de ce que j'ai écrit ci-dessus: