【问题标题】:How to show overflow menu only if text can be displayed on the ActionBar仅当文本可以在 ActionBar 上显示时如何显示溢出菜单
【发布时间】:2017-10-02 07:16:39
【问题描述】:

我如何(以编程方式)知道菜单是否在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,但在这两种情况下,我用于调试的设备仅显示图标,而不显示文本。

【问题讨论】:

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


    【解决方案1】:

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

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2013-08-24
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多