Je dois afficher à la fois l’ icon
et le title
de l’action dans ActionBar
.
J’ai essayé l’option ” withText
“, mais cela n’a aucun effet.
‘ always | withText ‘ fonctionnera s’il y a suffisamment de place, sinon il ne placera que l’icône. Vous pouvez le tester sur votre téléphone en rotation.
Vous pouvez créer des actions avec du texte de deux manières:
1- De XML:
Lorsque vous getSupportMenuInflater()
le menu, vous devez appeler getSupportMenuInflater()
car vous utilisez ActionBarSherlock
.
2- par programme:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT); item.setIcon(R.drawable.drawable_resource_name); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT); return true; }
Assurez-vous d’importer com.actionbarsherlock.view.Menu
et com.actionbarsherlock.view.MenuItem
.
Ce qui a fonctionné pour moi a été d’utiliser toujours | withText . Si vous avez beaucoup de menus, envisagez d’utiliser “ifRoom” au lieu de “toujours”.
La solution que je trouve consiste à utiliser une action personnalisée Mise en page: voici XML pour le menu.
La mise en page est
Cela montrera l’icône et le texte ensemble.
Pour obtenir le clickitem du fragment ou de l’activité:
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { //super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_details_fragment, menu); View view = menu.findItem(R.id.action_create).getActionView(); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_SHORT).show(); } }); }
Si any1 en 2017 se demande comment faire cela par programmation, il y a un moyen que je ne vois pas dans les réponses
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
Vous pouvez append un bouton dans la barre d’outils
créer le fichier btn_selector.xml dans drawable
Java:
booléen privé isSelect = false;
OnClickListener pour le bouton:
private void myClick() { if (!isSelect) { //**your code**// isSelect = true; } else {//**your code**// isSelect = false; } sort.setSelected(isSelect); }
Certains d’entre vous ont d’excellentes réponses, mais j’ai trouvé quelque chose de plus. Si vous voulez créer un MenuItem avec un sous-menu par programme:
@Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu subMenu = menu.addSubMenu(0, Menu.NONE, 0, "Menu title"); subMenu.getItem().setIcon(R.drawable.ic_action_child); subMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); subMenu.add(0, Menu.NONE, 0, "Subitem 1"); subMenu.add(0, Menu.NONE, 1, "Subitem 2"); subMenu.add(0, Menu.NONE, 2, "Subitem 3"); return true; }
Essayez d’append un object TextView dans la barre de menus en premier et en utilisant setCompoundDrawables()
pour placer l’image du côté souhaité. Cliquez sur l’activité de clic dans la vue de texte à la fin.
MenuItem item = menu.add(Menu.NONE, R.id.menu_item_save, 10, R.ssortingng.save); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS|MenuItem.SHOW_AS_ACTION_WITH_TEXT); TextView textBtn = getTextButton(btn_title, btn_image); item.setActionView(textBtn); textBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // your selector here } });
Vous pouvez littéralement tout personnaliser ici:
public TextView getTextButton (Ssortingng btn_title, Drawable btn_image) { TextView textBtn = new TextView(this); textBtn.setText(btn_title); textBtn.setTextColor(Color.WHITE); textBtn.setTextSize(18); textBtn.setTypeface(Typeface.create("sans-serif-light", Typeface.BOLD)); textBtn.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); Drawable img = btn_image; img.setBounds(0, 0, 30, 30); textBtn.setCompoundDrawables(null, null, img, null); // left,top,right,bottom. In this case icon is right to the text return textBtn; }
Utiliser app: showAsAction = “toujours | withText”. J’utilise Android 4.1.1, mais il devrait être applicable de toute façon. Le mien ressemble à ci-dessous
Suivez ces étapes:
final ActionBar actionBar = getActionBar();
code Java final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
android:logo=@drawable/logo and android:label="@ssortingng/actionbar_text"
l’activité concernée android:logo=@drawable/logo and android:label="@ssortingng/actionbar_text"
Je crois que ceci vous aidera