Как отображать как значок, так и название действия внутри ActionBar?

Мне нужно отображать как icon, так и title действия внутри ActionBar.

Я пробовал параметр "withText", но он не имеет никакого эффекта.

enter image description here

Ответ 1

' always | withText' будет работать, если есть достаточно места, иначе он будет размещать только значок. Вы можете проверить его на своем телефоне с вращением.

<item android:id="@id/menu_item"
android:title="text"
android:icon="@drawable/drawable_resource_name"
android:showAsAction="always|withText" />

Ответ 2

Вы можете создавать действия с текстом двумя способами:

1- От XML:

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

При раздувании меню вы должны вызвать getSupportMenuInflater(), так как вы используете ActionBarSherlock.

2- Программно:

@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;
}

Убедитесь, что вы импортируете com.actionbarsherlock.view.Menu и com.actionbarsherlock.view.MenuItem.

Ответ 3

Что сработало для меня, было использование always | withText. Если у вас много меню, используйте "ifRoom" вместо "always".

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

Ответ 4

Решение, которое я нахожу, заключается в использовании пользовательского действия Макет: Вот XML для меню.

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

Макет

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

это покажет значок и текст вместе.

Чтобы получить clickitem фрагмент или действие:

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();
        }
    });
}

Ответ 5

Если any1 в 2017 году задается вопросом, как это сделать программно, есть способ, который я не вижу в ответах

.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

Ответ 6

Некоторые из вас, ребята, имеют отличные ответы, но я нашел еще кое-что. Если вы хотите создать MenuItem с некоторым программным обеспечением SubMenu:

    @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;
    }

Ответ 7

Вы можете добавить кнопку на панели инструментов

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

создать файл btn_selector.xml в объявлении

<?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 для кнопки:

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

Ответ 8

Использование app: showAsAction = "always | withText". Я использую Android 4.1.1, но он должен применяться в любом случае. Мой вид ниже

<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"/>

Ответ 9

Выполните следующие действия:

  • Добавьте экземпляр панели действий в код Java final ActionBar actionBar = getActionBar();
  • Включить опцию Home Display actionBar.setDisplayShowHomeEnabled(false);
  • Добавить следующий код в соответствующий файл манифеста активности android:[email protected]/logo and android:label="@string/actionbar_text"

Я думаю, это поможет вам