92 votes

Comment afficher la vue personnalisée dans ActionBar ?

Je veux afficher de la recherche personnalisée dans l'actionbar (je suis en utilisant ActionBarSherlock pour ça).

J'ai eu ça:

enter image description here

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 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 la actionBar?

Aider, s'il vous plaît.

95voto

Tomik Points 10422

Il y a un truc pour cela. Tout ce que vous avez à faire est d’utiliser au lieu de comme le conteneur principal. Il est important d’avoir `` pour elle. Qui devrait le faire.

36voto

Peterdk Points 4848

J’ai eu du mal avec moi-même et essayé de réponse de Tomik. Toutefois, cela n’a pas fait la maquette à la largeur complète disponible au démarrage, uniquement lorsque vous ajoutez quelque chose à l’affichage.

Vous devrez définir le `` lors de l’ajout de l’affichage :

De cette façon, qu'il remplit complètement l’espace disponible. (Vous devrez peut-être utiliser la solution de Tomik aussi).

6voto

Mike Repass Points 2302

Les réponses de Tomik et Peterdk travailler quand vous le voulez votre vue personnalisée pour occuper la totalité 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:

http://stackoverflow.com/a/16517395/614880

Son code en bas a fonctionné parfaitement pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X