Як відобразити як значок, так і заголовок дії всередині ActionBar?


77

Мені потрібно відобразити все iconі titleдії всередині ActionBar.

Я спробував " withText" варіант, але це не має ефекту.

введіть тут опис зображення


4
чи ця проблема врешті була вирішена? якщо так, то що потрібно зробити?
Аджай

1
Схоже, відповідь тут: stackoverflow.com/questions/9282122/... Коротше кажучи, це за задумом, і вам потрібно надати власний макет, щоб обійти це.
N8allan

Відповіді:


117

' always | withText ' спрацює, якщо місця достатньо, інакше буде розміщено лише значок. Ви можете перевірити це на своєму телефоні з обертанням.

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

5
Привіт Eng.Faouad це не працює для мене, чи є якісь зміни, які ми повинні зробити програмно?
KK_07k11A0585

21
Не працює, навіть є багато кімнат. Піктограму та текст можна відображати лише в альбомному режимі.
Bagusflyer

2
@YiboLong Ця відповідь застаріла, оскільки програми зазвичай використовують бібліотеку appCompact
murt

@murt Ця відповідь та коментарі все ще діють у бібліотеці appcompat.
mhsmith

22

Ви можете створювати дії з текстом двома способами:

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.


MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT);Ось ID - це ідентифікатор макета (наприклад, R.layout.myMenuItem), POSITION - це позиція елементів, показаних на панелі дій (наприклад, 1,2,3 rtl), TEXT - це заголовок, який потрібно встановити для елемента панелі дій.
Reaz Murshed

17

У мене працювало використання " завжди | з текстом ". Якщо у вас багато меню, подумайте про використання "ifRoom" замість "завжди".

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

13

Рішення, яке я знаходжу, полягає у використанні макета спеціальних дій: Ось 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();
        }
    });
}

на випадок, якщо хтось отримає цю помилку "Помилка: (4) Не знайдено ідентифікатор ресурсу для атрибута 'actionlayout' у пакеті 'android'", це вирішується заміною "android: actionLayout" на "app: actionLayout"
cutiko

ну, ефект пульсації зник
Чарльз Гальвес

Якось це не видно для мене - це просто ігнорування макета і не відображається нічого, ні заголовок, якщо я його надаю (крім того, пропускаючи заголовок дає попередження, але воно компілюється)
Srneczek

@CharlesGalvez ви можете розмістити android:background="?selectableItemBackground"на LinearLayoutпоряд з android:clickable="true"іandroid:focusable="true"
Варяг

Можливо, це працює, я не впевнений, оскільки в моєму випадку в меню нічого не відображалося, але натиснута кнопка. Я думаю, що він намалював білий текст на білій панелі інструментів. Таким чином , щоб перевизначити TextColor см stackoverflow.com/questions/43276345 / ... .
CoolMind

1

Якщо хтось1 у 2017 році задається питанням, як це зробити програмно, є спосіб, якого я не бачу у відповідях

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

1

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

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

приватне логічне значення isSelect = false;

OnClickListener для кнопки:

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

Додавання кнопки на панель інструментів справді працює, хоча в Android Studio сказано: "Кнопка елемента тут не дозволена ...". (Тільки що спробував цю частину. Не реалізував повне рішення. Тому я не знаю, чи всі речі працюють.)
user2808624

0

Деякі з вас, хлопці, мають чудові відповіді, але я знайшов ще щось. Якщо ви хочете створити 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

Спробуйте спочатку додати 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;
}

-1

Використання програми: showAsAction = "завжди | 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"/>

-3

Виконайте такі дії:

  1. Додайте екземпляр панелі дій у коді Java final ActionBar actionBar = getActionBar();
  2. Увімкніть параметр Домашній дисплей actionBar.setDisplayShowHomeEnabled(false);
  3. Додайте наступний код у файл маніфесту відповідної діяльності android:logo=@drawable/logo and android:label="@string/actionbar_text"

Думаю, це вам допоможе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.