Ich muss beides icon
und die title
Aktion im Inneren anzeigen ActionBar
.
Ich habe die withText
Option " " ausprobiert , aber sie hat keine Auswirkung.
Ich muss beides icon
und die title
Aktion im Inneren anzeigen ActionBar
.
Ich habe die withText
Option " " ausprobiert , aber sie hat keine Auswirkung.
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" />
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 verwenden ActionBarSherlock
.
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 importieren com.actionbarsherlock.view.MenuItem
.
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" />
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();
}
});
}
android:background="?selectableItemBackground"
für LinearLayout
zusammen mit android: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);
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);
}
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;
}
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;
}
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"/>
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