Ich muss beides icon
und die title
Aktion im Inneren anzeigen ActionBar
.
Ich habe die withText
Option " " ausprobiert , aber sie hat keine Auswirkung.
android
android-layout
android-actionbar
actionbarsherlock
android-ui
Alexey Zakharov
quelle
quelle
Antworten:
' always | withText ' funktioniert, wenn genügend Platz vorhanden ist, andernfalls wird nur das Symbol platziert. Sie können es auf Ihrem Telefon mit Rotation testen.
<item android:id="@id/menu_item" android:title="text" android:icon="@drawable/drawable_resource_name" android:showAsAction="always|withText" />
quelle
Sie können Aktionen mit Text auf zwei Arten erstellen:
1- Aus XML:
<item android:id="@id/resource_name" android:title="text" android:icon="@drawable/drawable_resource_name" android:showAsAction="withText" />
Wenn Sie das Menü aufblasen, sollten Sie anrufen,
getSupportMenuInflater()
da Sie verwendenActionBarSherlock
.2- Programmatisch:
@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; }
Stellen Sie sicher, dass Sie
com.actionbarsherlock.view.Menu
und importierencom.actionbarsherlock.view.MenuItem
.quelle
MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT);
Hier ist ID die Layout-ID (z. B. R.layout.myMenuItem), POSITION ist die Position der in der Aktionsleiste angezeigten Elemente (z. B. 1,2,3 rtl), TEXT ist der Titel, den Sie für das Aktionsleistenelement festlegen möchten.Was für mich funktionierte, war die Verwendung von ' always | withText '. Wenn Sie viele Menüs haben, sollten Sie "ifRoom" anstelle von "immer" verwenden.
<item android:id="@id/resource_name" android:title="text" android:icon="@drawable/drawable_resource_name" android:showAsAction="always|withText" />
quelle
Die Lösung, die ich finde, besteht darin, ein benutzerdefiniertes Aktionslayout zu verwenden: Hier ist XML für das Menü.
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:Eventapp="http://schemas.android.com/apk/res-auto"> <!-- This is a comment. --> <item android:id="@+id/action_create" android:actionLayout="@layout/action_view_details_layout" android:orderInCategory="50" android:showAsAction = "always"/> </menu>
Das Layout ist
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="5dp" android:gravity="center" android:text="@string/create"/> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="5dp" android:paddingRight="5dp" android:gravity="center" android:src="@drawable/ic_action_v"/> </LinearLayout>
Dadurch werden das Symbol und der Text zusammen angezeigt.
So erhalten Sie das Klickelement für das Fragment oder die Aktivität:
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(); } }); }
quelle
android:background="?selectableItemBackground"
fürLinearLayout
zusammen mitandroid:clickable="true"
undandroid:focusable="true"
Wenn sich any1 im Jahr 2017 fragt, wie dies programmgesteuert zu tun ist, gibt es einen Weg, den ich in den Antworten nicht sehe
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
quelle
Sie können eine Schaltfläche in der Symbolleiste hinzufügen
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/AppTheme.PopupOverlay" app:title="title"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="16dp" android:background="@color/transparent" android:drawableRight="@drawable/ic_your_icon" android:drawableTint="@drawable/btn_selector" android:text="@string/sort_by_credit" android:textColor="@drawable/btn_selector" /> </android.support.v7.widget.Toolbar>
Erstellen Sie die Datei btn_selector.xml in drawable
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/white" /> <item android:color="@color/white_30_opacity" />
Java:
private boolean isSelect = false;
OnClickListener für Schaltfläche:
private void myClick() { if (!isSelect) { //**your code**// isSelect = true; } else {//**your code**// isSelect = false; } sort.setSelected(isSelect); }
quelle
Einige von euch haben großartige Antworten, aber ich habe eine zusätzliche Sache gefunden. Wenn Sie ein Menüelement mit einigen Untermenüs programmgesteuert erstellen möchten:
@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; }
quelle
Fügen Sie zuerst eine Textansicht zur Menüleiste hinzu und
setCompoundDrawables()
platzieren Sie das Bild mit auf der gewünschten Seite. Verbinden Sie die Klickaktivität am Ende mit der Textansicht.MenuItem item = menu.add(Menu.NONE, R.id.menu_item_save, 10, R.string.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 } });
Hier können Sie buchstäblich alles anpassen:
public TextView getTextButton (String 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; }
quelle
App verwenden: showAsAction = "always | withText". Ich benutze Android 4.1.1, aber es sollte trotzdem zutreffen. Meins sieht aus wie unten
<item android:id="@+id/action_sent_current_data" android:icon="@drawable/ic_upload_cloud" android:orderInCategory="100" android:title="@string/action_sent_current_data" app:showAsAction="always|withText"/>
quelle
Folge diesen Schritten:
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
android:logo=@drawable/logo and android:label="@string/actionbar_text"
Ich denke, das wird dir helfen
quelle