【问题标题】:ActionBar icons doesn't change on landscapeActionBar 图标在横向上不会改变
【发布时间】:2015-04-02 22:56:38
【问题描述】:

我想在 CollapseActionView 中以纵向显示一个图标和 2 个项目,在 ActionBar 中以横向模式显示所有 3 个图标。我创建了两个单独的文件 menu.xml 并将其放在端口和土地文件夹中。我的端口/menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        yourapp:showAsAction="always"
        android:inputType="textNoSuggestions"
        yourapp:actionViewClass="android.support.v7.widget.SearchView" />
    <item
        android:id="@+id/maps"
        android:icon="@drawable/checkin"
        android:title="@string/maps"
        yourapp:showAsAction="collapseActionView" />
    <item
        android:id="@+id/sort_by"
        android:icon="@drawable/ic_action_content_sort"
        android:title="@string/sort_by"
        yourapp:showAsAction="collapseActionView" />
</menu>

土地/menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        yourapp:showAsAction="always"
        android:inputType="textNoSuggestions"
        yourapp:actionViewClass="android.support.v7.widget.SearchView" />
    <item
        android:id="@+id/maps"
        android:icon="@drawable/checkin"
        android:title="@string/maps"
        yourapp:showAsAction="always" />
    <item
        android:id="@+id/sort_by"
        android:icon="@drawable/ic_action_content_sort"
        android:title="@string/sort_by"
        yourapp:showAsAction="always" />
</menu>

由于某种原因,ActionBar 总是根据 port/menu.xml 显示,尽管设备的方向。怎么了?

【问题讨论】:

  • 只使用一个 xml 并在第二项和第三项中使用 showAsAction="ifRoom|collapseActionView"。
  • 现在我可以在两个方向上显示所有图标

标签: android xml android-actionbar


【解决方案1】:

尝试使菜单无效并使用land/port menu.xml重新创建:

boolean isLandscape = false;

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();

    if(isLandscape) {
        inflater.inflate(R.land.menu, menu);
    else
        inflater.inflate(R.port.menu, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);

    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE)
        isLandscape = true;
    else if (config.orientation == Configuration.ORIENTATION_PORTRAIT)
        isLandscape = false;

    invalidateOptionsMenu()
}

【讨论】:

  • 旋转设备时崩溃
【解决方案2】:

经过额外的研究,我自己弄清楚了。我只需要一个 menu.xml 文件而不是定义 showAsAction。我的 menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        yourapp:showAsAction="ifRoom"
        android:inputType="textNoSuggestions"
        yourapp:actionViewClass="android.support.v7.widget.SearchView" />
    <item
        android:id="@+id/maps"
        android:icon="@drawable/checkin"
        android:title="@string/maps" />
    <item
        android:id="@+id/sort_by"
        android:icon="@drawable/ic_action_content_sort"
        android:title="@string/sort_by"/>
</menu>

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多