仅当文本可以显示在ActionBar

时间:2017-10-02 07:16:39

标签: android android-menu android-actionbar-compat

如何(以编程方式)知道菜单是否在ActionBar上显示文字?

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@+id/action_cancel"
        android:orderInCategory="100"
        android:title="@string/action_cancel"
        android:icon="@drawable/ic_cancel_24dp"
        app:showAsAction="always|withText"/>
    <item
        android:id="@+id/action_clear"
        android:orderInCategory="200"
        android:title="@string/action_clear"
        android:icon="@drawable/ic_clear_24dp"
        app:showAsAction="always|withText"/>
    <item
        android:id="@+id/action_done"
        android:orderInCategory="300"
        android:title="@string/action_done"
        android:icon="@drawable/ic_done_24dp"
        app:showAsAction="always|withText"/>
</menu>

如果没有显示文字,我希望菜单保留为菜单
我还尝试将always|withText替换为ifRoom|withText,但在这两种情况下,我用于调试的设备仅显示图标,而不显示文本。

1 个答案:

答案 0 :(得分:0)

我终于使用了自定义工具栏布局,我在其中放置了带有图标+文本的项目。

<TextView
    android:id="@+id/action_cancel"
    style="@style/ActionBarItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawableLeft="@drawable/ic_cancel"
    android:text="@string/action_cancel"/>

<TextView
    android:id="@+id/action_clear"
    style="@style/ActionBarItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawableLeft="@drawable/ic_clear"
    android:text="@string/action_clear"/>

<TextView
    android:id="@+id/action_done"
    style="@style/ActionBarItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawableLeft="@drawable/ic_done"
    android:text="@string/action_done"/>

private void setupActionBar() {
    MyLog.pe(DEBUG, TAG, "+ setupActionBar()");
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

final ActionBar actionBar = getSupportActionBar();
try {
    assert actionBar != null;
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(R.layout.actionbar_cancel_clear_done);

    final View customActionBarView = actionBar.getCustomView();
    customActionBarView.setLayoutParams(
            new Toolbar.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));
    customActionBarView.findViewById(R.id.action_cancel).setOnClickListener(this);
    customActionBarView.findViewById(R.id.action_clear).setOnClickListener(this);
    customActionBarView.findViewById(R.id.action_done).setOnClickListener(this);
} catch (Exception e) {
    MyLog.e(DEBUG, TAG, "SupportActionBar is null!");
}


MyLog.px(DEBUG, TAG, "- setupActionBar()");

}