我想将导航栏放在每个活动的顶部(参见:截图)。导航栏应该有两个按钮(上一个和下一个活动)和活动指示器。我已经看到了一些关于 SO 的解决方案(使用包含、片段、操作栏),但是哪一个是最好的,或者可能有人有另一种选择?
3 回答
此功能由ViewPager类提供。您提供片段而不是活动,您可以在提供的视图之间快速有效地水平滚动。您将只使用一项活动,因此您的导航栏将始终可见。唯一会改变的部分是 ViewPager 的页面。
至于您的导航栏,有几个选项。您可以提供自己的视图实现,但您必须为更改页面创建一个侦听器,该侦听器将为 ViewPager 设置当前页面。这是最复杂的方法。
另一种解决方案是使用ActionBarSherlock,您会发现它在很多方面都很有用。在那里,您可以将操作栏的导航与您的 ViewPager 连接起来。此解决方案是最简单且最强大的解决方案。在Google IO应用程序中,您可以看到它是如何完成的。家庭活动是您应该关注的。此解决方案的问题是您将获得导航器的预定义视图。
最后一个可能最适合您的解决方案是尝试使用Page Indicator,这可以简化您的导航栏实现。
这里提到的一切都在 ViewPager 上,所以一定要使用它。我不知道任何其他更好的解决方案。问题是您希望如何实现导航。
我同意Commonsware和MartinSVK。我会邀请您试用http://code.google.com/p/sherlock-demo/上的代码示例。正如上述两张海报所提到的,它使用 ViewPager 让您在 Fragment 之间水平滑动。但它也使用 Tab 导航,它在屏幕顶部提供视觉指示,正如您最初要求的那样。关于 Android UI 创建的想法,你真的应该花几分钟浏览一下http://developer.android.com/design。
我的选择是创建共享活动类(例如 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;
}
}