web-dev-qa-db-fra.com

Ajout d'une vue personnalisée à une barre d'outils

J'essaie d'ajouter une vue personnalisée à la nouvelle barre d'outils (Lollipop). Mais en quelque sorte, la vue est ajoutée sous la barre d'outils. Ça fonctionnait bien quand j'ai utilisé actionBar.setCustomView mais maintenant, après la migration vers la barre d'outils, cela ne fonctionne pas. Voici le code. Quels changements faut-il apporter?

Fragment:

    toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
    ((ActionBarActivity) getActivity()).setSupportActionBar(toolbar);

    toolbar.setTitle(getString(R.string.app));



    ActionBar actionBar = ((ActionBarActivity) getActivity())
            .getSupportActionBar();

    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

    LayoutInflater inflater = (LayoutInflater) getActivity()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    // inflate the view
    final View view = inflater.inflate(R.layout.actionbar_search, null);
    final ImageView searchIcon = (ImageView) view
            .findViewById(R.id.search_icon);
    final ClearableAutoCompleteTextView searchBox = (ClearableAutoCompleteTextView) view
            .findViewById(R.id.search_box);

    // start with the text view hidden in the action bar
    searchBox.setVisibility(View.INVISIBLE);
    searchIcon.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleSearch(false, view);
        }
    });

    searchBox.setOnClearListener(new OnClearListener() {

        @Override
        public void onClear() {
            toggleSearch(true, view);
        }
    });

    searchBox.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {


        }

    });

toolbar.addView(view);              
// actionBar.setCustomView(view); // This worked previously 
//((ActionBarActivity)getActivity()).getSupportActionBar().setCustomView(view); //doesnt work with toolbar
26
SjNerd

Avec la barre d'outils, j'ai réussi à réaliser cela comme ceci:

setSupportActionBar(toolbar);
View logo = getLayoutInflater().inflate(R.layout.view_logo, null);
toolbar.addView(logo);

Ou vous pouvez également simplement ajouter votre vue au xml de la barre d'outils, car il s'agit simplement d'un ViewGroup. De cette façon, vous aurez l'aperçu dans l'éditeur de disposition. Non Java requis.

44
Jacek Kwiecień

Fonctionne très bien pour moi.

LayoutInflater mInflater=LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.toolbar_custom_view, null);
toolbar.addView(mCustomView);
9
DoronK

Gonflez simplement la vue que vous souhaitez ajouter en passant la vue de la barre d'outils en tant que deuxième paramètre de la méthode de gonflement; De cette façon, l'appel à "addView" n'est pas nécessaire:

setSupportActionBar(toolbar);
View logo = getLayoutInflater().inflate(R.layout.view_logo, toolbar);
2
Omar Mohamed