Wie werden sowohl das Symbol als auch der Titel der Aktion in ActionBar angezeigt?

77

Ich muss beides iconund die titleAktion im Inneren anzeigen ActionBar.

Ich habe die withTextOption " " ausprobiert , aber sie hat keine Auswirkung.

Geben Sie hier die Bildbeschreibung ein

Alexey Zakharov
quelle
4
Wurde dieses Problem endlich gelöst? Wenn ja, was ist zu tun?
Ajay
1
Die Antwort scheint hier zu sein: stackoverflow.com/questions/9282122/… Kurz gesagt, dies ist beabsichtigt und Sie müssen ein benutzerdefiniertes Layout bereitstellen, um es zu umgehen .
N8allan

Antworten:

117

' 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" />
Yibo Long
quelle
5
Hallo Eng.Faouad, es funktioniert nicht für mich. Gibt es irgendwelche Änderungen, die wir programmgesteuert vornehmen müssen?
KK_07k11A0585
21
Funktioniert nicht, auch wenn es viele Räume gibt. Das Symbol und der Text können nur im Querformat angezeigt werden.
Bagusflyer
2
@ YiboLong diese Antwort ist veraltet, da Programme normalerweise AppCompact-Bibliothek verwenden
murt
@murt Diese Antwort und die Kommentare sind in der Appcompat-Bibliothek weiterhin gültig.
Mhsmith
22

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

Benito Bertoli
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.
Reaz Murshed
17

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" />
Ebernie
quelle
13

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();
        }
    });
}
Gilad Zelniker
quelle
Falls jemand diesen Fehler erhält "Fehler: (4) Keine Ressourcenkennung für das Attribut 'actionlayout' im Paket 'android' gefunden", wird dies durch Ersetzen von "android: actionLayout" durch "app: actionLayout"
behoben
Nun, der Welleneffekt ist verschwunden
Charles Galvez,
Irgendwie zeigt sich das für mich nicht - es ignoriert nur das Layout und zeigt nichts oder den Titel an, wenn ich es zur Verfügung stelle (übrigens gibt der Titel eine Warnung aus, aber er wird kompiliert)
Srneczek
@CharlesGalvez können Sie legen android:background="?selectableItemBackground"für LinearLayoutzusammen mit android:clickable="true"undandroid:focusable="true"
Variag
Wahrscheinlich funktioniert das, ich bin mir nicht sicher, weil in meinem Fall nichts im Menü angezeigt wurde, sondern ein Knopf gedrückt. Ich denke, es hat weißen Text auf die weiße Symbolleiste gezeichnet. Informationen zum Überschreiben von Textfarben finden Sie unter stackoverflow.com/questions/43276345/… .
CoolMind
1

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);
Alen Zarkovic
quelle
1

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);
}
Nagel Shaykhraziev
quelle
Das Hinzufügen der Schaltfläche zur Symbolleiste funktioniert in der Tat, obwohl in Android Studio "Elementschaltfläche hier nicht zulässig ..." angegeben ist. (Ich habe gerade diesen Teil ausprobiert. Ich habe nicht die vollständige Lösung implementiert. Ich weiß also nicht, ob alles funktioniert.)
user2808624
0

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;
    }
Denken Sie zweimal an Code
quelle
0

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;
}
Freddie Jin
quelle
-1

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"/>
desu sudarsana
quelle
-3

Folge diesen Schritten:

  1. Fügen Sie die Aktionsleisteninstanz im Java-Code hinzu final ActionBar actionBar = getActionBar();
  2. Aktivieren Sie die Home Display Option actionBar.setDisplayShowHomeEnabled(false);
  3. Fügen Sie den folgenden Code in die Manifestdatei der jeweiligen Aktivität ein android:logo=@drawable/logo and android:label="@string/actionbar_text"

Ich denke, das wird dir helfen

Rao
quelle