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
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.
Fonctionne très bien pour moi.
LayoutInflater mInflater=LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.toolbar_custom_view, null);
toolbar.addView(mCustomView);
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);