每个活动顶部的导航栏

时间:2012-08-18 17:17:57

标签: android navigation indicator

我想将导航栏放在每个活动的顶部(参见:屏幕截图)。导航栏应该有两个按钮(上一个和下一个活动)和活动指示器。我已经在SO上看到了一些解决方案(使用包含,片段,操作栏),但哪一个是最好的还是有人可以选择另一个?

enter image description here

3 个答案:

答案 0 :(得分:1)

此功能由ViewPager类提供。您可以在提供的视图之间快速有效地进行水平滚动,而不是活动。 您只需使用一个活动,因此您的导航栏将始终可见。唯一可以改变的部分是ViewPager的页面。

至于导航栏,有几个选项。您可以提供自己的视图实现,但是您必须创建一个侦听器来更改将为ViewPager设置当前页面的页面。这是最复杂的方式。

另一种解决方案是使用ActionBarSherlock,您会发现它在很多方面都很有用。在那里,您可以将操作栏的导航与ViewPager连接起来。这个解决方案是最简单的,也是最强大的。在Google IO应用中,您可以看到它是如何完成的。家庭活动是你应该看到的。此解决方案的问题在于您将获得导航器的预定义视图。

最适合您的最后一个解决方案是尝试使用Page Indicator,这可以简化导航栏的实施。

此处提到的所有内容都位于ViewPager上,因此请务必使用它。我不知道任何其他更好的解决方案。问题是你想如何实现导航。

答案 1 :(得分:1)

我同意CommonswareMartinSVK。我邀请您在http://code.google.com/p/sherlock-demo/处试用代码示例。正如前面提到的两个海报所提到的,它使用ViewPager让你在片段之间水平滑动。但它也使用Tab导航,它在屏幕顶部提供视觉指示,正如您最初所要求的那样。有关Android UI创建的想法,您应该花几分钟时间浏览http://developer.android.com/design

答案 2 :(得分:-1)

我的选择是创建共享活动类(例如BaseActivity)并覆盖onCreate方法,该方法设置基本布局。 子clases应该使用setContentView的setContent instand

public class BaseActivity extends Activity {
    private LayoutInflater mInflater;

    @Override
    public void onCreate(Bundle b) {
         super.onCreate(b);
         setContentView(R.layout.base);
    }

    public void setContent(View content) {
         setContentPart(R.id.baseContentContainer, content);
    }

    public void setContent(int contentLayoutId) {
        setContentPart(R.id.baseContentContainer, contentLayoutId);
    }

    private void setContentPart(int containerId, int layoutId) {
        final LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        setContentPart(containerId, inflater.inflate(layoutId, null));
    }

    private void setContentPart(int containerId, View view) {
        final ViewGroup vg = (ViewGroup) findViewById(containerId);
        vg.setVisibility(view != null ? View.VISIBLE : View.GONE);
        vg.removeAllViews();
        if (view != null) vg.addView(view, layoutFillParent);
    }

    public LayoutInflater getLayoutInflater() {
        if (mInflater == null) mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        return mInflater;
    }


}