带有操作栏和标签的Android布局

时间:2012-06-14 13:25:08

标签: android android-layout tabs android-fragments actionbarsherlock

我是Android新手,我需要你的建议。我想要一个带有操作栏的活动,我还需要选项卡(但不是操作栏中的选项卡)和操作栏中的下拉列表进行导航。当我点击例如第一个选项卡,操作栏中的导航列表应填充数据,当秒选项卡,导航列表应填充其他数据等时,更改选项卡时也应更改操作项。当我从操作栏的导航列表中选择一些项目时,应该更新视图。我不知道该怎么做。

我使用ActionBarSherlock作为操作栏,我已经使用TabHost和TabWidget使用片段,当我点击选项卡,然后片段被更改,但这不是我想要的,我不知道该怎么做下一个。你能帮帮我吗?

这是一个屏幕:

enter image description here

当我单击选项卡1时,操作栏中的导航列表应为Tab1 List1,Tab1 List2等,并且应首次显示列表中的默认视图(例如,第一个Tab1 List1)或用户最后选择的从导航列表中查看。 当我点击标签2时,列表应该是Tab2 List1,Tab2 List2等,并且应该显示例如Tab2 List2视图。等等 因此,每个标签都会调整操作栏。

3 个答案:

答案 0 :(得分:5)

您有两种选择:

  1. 使用操作栏中的列表导航,并在内容视图的顶部放置TabWidget
  2. 使用操作栏中的标签导航,并使用Spinner
  3. 设置自定义视图

    小心不要让用户过载。通常两种类型的导航可能会令人困惑。

答案 1 :(得分:0)

对于动作项目,如果您正在为不同的"屏幕使用片段"然后他们可以注册以提供setHasOptionsMenu(true);的操作项,并通过覆盖onCreateOptionsMenu(Menu menu, MenuInflater inflater)来定义他们的操作。所以,一个好的设计规则,如果你不能简单地解释它,你可能做错了,应该改变设计。

也可能是滥用Android设计与动作栏模式分开太远,这意味着你有一些看起来像带导航的ActionBar,但实际上你还有其他一些你自己编造的东西。如果这是必需的,那么你不应该制作看起来像导航栏的动作栏,因为用户会期望某些行为并得到不同的反应(混乱)。

最后,根据您的描述,似乎选项卡驱动列表导航,但列表导航具有视觉优先级(位于上方且基本上包含选项卡)。因此,如果选项卡通过选择列表导航是一致的,但是列表根据选项卡导航的选择而更改,则通过使选项卡具有列表导航的视觉优先级来更清楚地表示它。所以,如果你保持两个导航,我会改变他们的顺序。也许尝试列表导航与视图寻呼机而不是列表导航。 Jake还有一个很棒的浏览器库http://viewpagerindicator.com/

答案 2 :(得分:0)

我是通过Setting the tab navigation in action barSetting Spinner in Menu for navigation list实现此目标的。我会解释第二部分,因为第一部分是微不足道的。

Spinner中定义action_bar.xml

<item
    android:id="@+id/menu_test_spinner"
    android:actionViewClass="android.widget.Spinner"
    android:showAsAction="always"/>

在活动中Spinner设置和绑定数据:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.action_bar, menu);
    MenuItem testSpinner = menu.findItem( R.id.menu_test_spinner );
    setupTestSpinner(testSpinner);
    return true;
}

private void setupTestSpinner(MenuItem item) {
    View view = item.getActionView();
    if (view instanceof Spinner) {
        Spinner spinner = (Spinner) view;
        spinner.setAdapter(ArrayAdapter.createFromResource(this,
                R.array.test,
                android.R.layout.simple_spinner_dropdown_item));
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                //Do something on item selection
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });
    }
}

现在,覆盖响应标签更改的方法,并更改Spinner中的导航列表项。