0

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

在此处输入图像描述

4

3 回答 3

1

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

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

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

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

这里提到的一切都在 ViewPager 上,所以一定要使用它。我不知道任何其他更好的解决方案。问题是您希望如何实现导航。

于 2012-08-18T17:44:00.337 回答
1

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

于 2012-08-18T18:12:11.400 回答
-1

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

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;
    }


}
于 2012-08-18T17:28:33.807 回答