如何在ActionBar中同时显示图标和动作标题?


77

我需要同时显示icontitle的动作ActionBar

我尝试了“ withText”选项,但没有效果。

在此处输入图片说明


4
这个问题终于解决了吗?如果是这样,需要做什么?
Ajay 2012年

1
答案似乎在这里:stackoverflow.com/questions/9282122/…简而言之,这是设计使然,您必须提供自定义布局来解决该问题。
N8allan 2014年

Answers:


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

21
即使有很多房间也不工作。图标和文本只能横向显示。
Bagusflyer 2014年

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.Menucom.actionbarsherlock.view.MenuItem


MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT);这里的ID是布局ID(例如R.layout.myMenuItem),POSITION是操作栏中显示的项目的位置(例如1,2,3 rtl),TEXT是要设置为操作栏中项目的标题。
Reaz Murshed 2015年

17

对我有用的是使用' always | withText '。如果菜单很多,请考虑使用“ ifRoom”而不是“ always”。

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

这将同时显示图标和文本。

要获取片段或活动的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();
        }
    });
}

如果有人收到此错误“错误:(4)在包'android'中找不到属性'actionlayout'的资源标识符”,则可以通过将“ android:actionLayout”替换为“ app:actionLayout”来解决
cutiko

以及涟漪效应消失了
查尔斯·加尔维兹

不知何故,这对我不显示-它只是忽略了布局,并且如果我提供了标题,则什么也不显示(顺便说一句,省略标题会发出警告,但会编译)
Srneczek,2016年

@CharlesGalvez可以放置android:background="?selectableItemBackground"LinearLayout沿android:clickable="true"android:focusable="true"
Variag

我不确定这可能行得通,因为就我而言,菜单中什么也没有显示,只是按下了一个按钮。我认为它在白色工具栏上绘制了白色文本。因此,要覆盖textcolor,请参见stackoverflow.com/questions/43276345/…
CoolMind

1

如果2017年有any1想知道如何以编程方式执行此操作,那么我在答案中看不到一种方法

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

在drawable中创建文件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);
}

尽管Android Studio会说“此处不允许元素按钮”,但确实可以将按钮添加到工具栏。(只是尝试了这一部分。没有实现完整的解决方案。所以我不知道所有这些东西是否都有效。)
user2808624

0

你们中的一些人有很好的答案,但我发现了另外一些东西。如果要以编程方式创建带有某些SubMenu的MenuItem:

    @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()用于将图像放置在所需的任何一侧。最后将单击活动绑定到textview。

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

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

-3

跟着这些步骤:

  1. 在Java代码中添加操作栏实例 final ActionBar actionBar = getActionBar();
  2. 启用主屏幕显示选项 actionBar.setDisplayShowHomeEnabled(false);
  3. 在相应活动的清单文件中添加以下代码 android:logo=@drawable/logo and android:label="@string/actionbar_text"

我想这对你有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.