我想将导航栏放在每个活动的顶部(参见:屏幕截图)。导航栏应该有两个按钮(上一个和下一个活动)和活动指示器。我已经在SO上看到了一些解决方案(使用包含,片段,操作栏),但哪一个是最好的还是有人可以选择另一个?
答案 0 :(得分:1)
此功能由ViewPager类提供。您可以在提供的视图之间快速有效地进行水平滚动,而不是活动。 您只需使用一个活动,因此您的导航栏将始终可见。唯一可以改变的部分是ViewPager的页面。
至于导航栏,有几个选项。您可以提供自己的视图实现,但是您必须创建一个侦听器来更改将为ViewPager设置当前页面的页面。这是最复杂的方式。
另一种解决方案是使用ActionBarSherlock,您会发现它在很多方面都很有用。在那里,您可以将操作栏的导航与ViewPager连接起来。这个解决方案是最简单的,也是最强大的。在Google IO应用中,您可以看到它是如何完成的。家庭活动是你应该看到的。此解决方案的问题在于您将获得导航器的预定义视图。
最适合您的最后一个解决方案是尝试使用Page Indicator,这可以简化导航栏的实施。
此处提到的所有内容都位于ViewPager上,因此请务必使用它。我不知道任何其他更好的解决方案。问题是你想如何实现导航。
答案 1 :(得分:1)
我同意Commonsware和MartinSVK。我邀请您在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;
}
}