it-swarm.com.ru

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

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

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

enter image description here

73
Alexey Zakharov

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

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

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

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.

22
Benito Bertoli

То, что работало для меня, использовало ' always | withText '. Если у вас много меню, рассмотрите возможность использования «ifRoom» вместо «всегда».

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

Решение, которое я нахожу, состоит в том, чтобы использовать настраиваемое действие Layout: Вот 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>

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

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

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

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

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

Джава:  

приватный логический isSelect = false;

OnClickListener для кнопки:

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

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

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

У некоторых из вас есть отличные ответы, но я нашел кое-что еще. Если вы хотите создать 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;
    }
0
Think Twice Code Once

Попробуйте сначала добавить TextView к строке меню и использовать setCompoundDrawables(), чтобы поместить изображение в нужную сторону. Связывание кликает на текстовое представление в конце.

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

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

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