Android ActionBar选择方向更改时的行为

时间:2013-12-31 02:41:44

标签: android tabs android-actionbar

我正在使用ActionBar Tabs开发一个Android项目。 选项卡在纵向模式下被视为选项卡,在横向视图中被视为下拉列表,如此处所述https://code.google.com/p/android/issues/detail?id=24439

我的目标是在纵向模式下将图像显示为标题页眉,在横向模式下显示文本标题。 我们的想法是使用自定义布局,仅显示所需的小部件。

这是我的代码

    public class ResultListActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            final ActionBar actionBar = getActionBar();     
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar
                .newTab()
                .setCustomView(
                        getTabHeaderView(R.string.tab_recommended,
                                R.drawable.ic_action_good))
                .setTabListener(
                        new TabListener<RecommendedFragment>(
                                RecommendedFragment.class)));
        actionBar.addTab(actionBar
                .newTab()
                .setCustomView(
                        getTabHeaderView(R.string.tab_favorites,
                                R.drawable.ic_action_important))
                .setTabListener(
                        new TabListener<FavoritesFragment>(
                                FavoritesFragment.class)));
        actionBar
                .addTab(actionBar
                        .newTab()
                        .setCustomView(
                                getTabHeaderView(R.string.tab_nearest,
                                        R.drawable.ic_action_place))
                        .setTabListener(
                                new TabListener<NearestFragment>(
                                        NearestFragment.class)));

        actionBar.addTab(actionBar
                .newTab()
                .setCustomView(
                                getTabHeaderView(R.string.tab_cheapest,
                                        R.drawable.ic_action_dollar_sign))
                .setTabListener(
                        new TabListener<CheapestFragment>(
                                CheapestFragment.class)));
    }    

    private View getTabHeaderView(final int text, final int drawable) {
        View v = getLayoutInflater().inflate(R.layout.tab_header, null);
        ((ImageView) (v.findViewById(R.id.tabIcon))).setImageResource(drawable);
        ((TextView) (v.findViewById(R.id.tabText))).setText(text);
        return v;
    }

    private class TabListener<T extends Fragment> implements
            ActionBar.TabListener {
    ....
    }
}

我在文件夹R.layout.tab_headerlayout-port中创建了两个描述layout-land的XML,其中包含以下内容

layout-land \ tab_header.xml(ImageView已消失)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/tabIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="2dp"
        android:visibility="gone" />

    <TextView
        android:id="@+id/tabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:visibility="visible" />

</LinearLayout>

layout-port \ tab_header.xml(TextView已消失)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/tabIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingTop="2dp" 
        android:visibility="visible"/>

    <TextView
        android:id="@+id/tabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:visibility="gone" />

</LinearLayout>

但结果令人困惑。 (我有截图,但我不允许发布它们,抱歉)。

  • 当应用程序以纵向方式启动时,选项卡将被视为图像。
  • 旋转设备后,Tabs会根据需要变为带有文本标题的下拉列表。
  • 但在我更改Tab / Drop-Down之后,Tabs会返回Tabs,没有任何内容。

因此问题:应用程序出了什么问题,也许,这个概念? 也许,这是在方向变化期间控制标签行为的某种方式吗?

1 个答案:

答案 0 :(得分:1)

即使您没有为ActionBar本身使用自定义视图,仍然需要调用

setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
你的ActionBar上的

。我今天遇到了同样的问题,这就解决了这个问题。