wake-up-neo.com

Wie kann ich sowohl das Symbol als auch den Titel der Aktion in ActionBar anzeigen?

Ich muss sowohl icon als auch title der Aktion in ActionBar anzeigen.

Ich habe die Option "withText" ausprobiert, sie hat jedoch keine Auswirkung.

enter image description here

73
Alexey Zakharov

' always | withText ' funktioniert, wenn genügend Platz vorhanden ist, andernfalls wird nur das Symbol platziert. Sie können es mit Rotation auf Ihrem Telefon testen.

<item Android:id="@id/menu_item"
Android:title="text"
Android:icon="@drawable/drawable_resource_name"
Android:showAsAction="always|withText" />
110
Yibo Long

Sie können auf zwei Arten Aktionen mit Text erstellen:

1- Von XML:

<item Android:id="@id/resource_name"
      Android:title="text"
      Android:icon="@drawable/drawable_resource_name"
      Android:showAsAction="withText" />

Beim Aufblasen des Menüs sollten Sie getSupportMenuInflater() aufrufen, da Sie ActionBarSherlock verwenden.

2- Programmgesteuert:

@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 com.actionbarsherlock.view.MenuItem importieren.

22
Benito Bertoli

Was für mich funktionierte, war ' always | withText '. Wenn Sie über viele Menüs verfügen, sollten Sie 'ifRoom' anstelle von 'always' verwenden.

<item Android:id="@id/resource_name"
Android:title="text"
Android:icon="@drawable/drawable_resource_name"
Android:showAsAction="always|withText" />
17
ebernie

Die Lösung, die ich finde, ist die Verwendung der benutzerdefinierten Aktion Layout: 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>

daraufhin werden das Symbol und der Text zusammen angezeigt.

So erhalten Sie das Clickitem als Fragment oder 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();
        }
    });
}
13
Gilad Zelniker

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 button:

private void myClick() {
    if (!isSelect) {
       //**your code**//
        isSelect = true;
    } else {//**your code**//
        isSelect = false;
    }
    sort.setSelected(isSelect);
}
1

Wenn jemand im Jahr 2017 sich wundert, wie man dies programmgesteuert macht, gibt es eine Möglichkeit, die ich in den Antworten nicht sehe

.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
1
Alen Zarkovic

Einige von euch haben großartige Antworten, aber ich habe noch etwas gefunden. Wenn Sie ein MenuItem mit einem SubMenu 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 zunächst eine Textansicht zur Menüleiste hinzu und platzieren Sie das Bild mit setCompoundDrawables() auf der gewünschten Seite. Klicken Sie am Ende auf die 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   }
    });

Sie können hier alles buchstäblich 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;
}
0
Freddie Jin