纵观在为Android“L”预览API diff报告,我看到与在导航模式的所有方法ActionBar
类(如setNavigationMode()
,addTab()
,selectTab()
,&C)。现在已弃用。
该文档说明:
内置工具栏操作栏不赞成使用操作栏导航模式。考虑改用其他常见的导航模式。
所谓的替代品是什么?
另外,“嵌入式工具栏操作栏”是否是新概念?我想我以前没有听说过。
纵观在为Android“L”预览API diff报告,我看到与在导航模式的所有方法ActionBar
类(如setNavigationMode()
,addTab()
,selectTab()
,&C)。现在已弃用。
该文档说明:
内置工具栏操作栏不赞成使用操作栏导航模式。考虑改用其他常见的导航模式。
所谓的替代品是什么?
另外,“嵌入式工具栏操作栏”是否是新概念?我想我以前没有听说过。
Answers:
新的Android设计支持库添加了TabLayout,提供了与标签的材料设计准则相匹配的标签实现。如何实现标签和一个完整的演练ViewPager
中可以找到这个视频
现在弃用:该PagerTabStrip是支持库的一部分(已经有一段时间),并作为直接替换。如果您喜欢较新的Google Play样式标签,则可以使用PagerSlidingTabStrip库或修改Google提供的示例SlidingTabsBasic或SlidingTabsColors,如本开发字节视频中所述。
NAVIGATION_MODE_LIST
容易得多,因为所做的全部就是添加一个Spinner和一些回调助手。
NAVIGATION_MODE_LIST
什么?矿山将其列为已弃用……
现在可以使用Android 5.0文档,我们已经有了Toolbar小部件的官方文档:
在应用程序内容中使用的标准工具栏。
工具栏是在应用程序布局中使用的操作栏的概括。传统上,操作栏是由框架控制的Activity不透明窗口装饰的一部分,而工具栏则可以放置在视图层次结构中的任意嵌套级别。
一个Toolbar
小工具也可以用来代替行动吧:
应用程序可以选择使用该
setActionBar()
方法将工具栏指定为活动的操作栏。
由于工具栏不能包含标签本身,因此最可能是由于操作栏中标签的弃用。
此外,它还可以通过appcompat库在以前的Android版本中使用。有关更多信息,请参见Chris Banes的这篇文章。摘录:
Android 5.0引入了新的工具栏小部件。这是动作条模式的推广,但给你很多在使用它更多的控制和灵活性。工具栏与其他任何视图一样,都是层次结构中的视图,可以更轻松地与其余视图进行交织,制作动画,对滚动事件做出反应。
似乎他们添加了一个名为android.widget.Toolbar
extends 的新类ViewGroup
。此外,他们增加了一个新的方法setActionBar(Toolbar)
在Activity
。我没有测试过,但它看起来像你可以用各种各样的TabWidgets
,Spinners
或者自定义视图进入Toolbar
并使用它作为你的动作条。
对于已过时的ActionBar的“替换”,我将ActionBar类型的变量的类型更改为PagerTabStrip,如下所示(注释中的旧代码):
// ActionBar bigActionBar;
PagerTabStrip bigActionBar;
〜actionBar的.selectTab(tabindex)的“替换”是使用我关联的ViewPager的.setCurrentItem(int)方法,如下所示(注释中的旧代码):
/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);
希望这会有所帮助。
我遇到了同样的问题,此解决方案非常适合我:
在包含viewpager的布局xml文件中,添加一个PagerTabStrip,如下所示:
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tab_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#996633"
android:textColor="#CCCCCC"
android:paddingTop="5dp"
android:paddingBottom="5dp" />
要控制页面标题,请在您的ViewPager文件中添加一个switch语句:
@Override
public CharSequence getPageTitle(int position)
{
switch (position)
{
case 0:
return "Page 1";
case 1:
return "Page 2";
case 2:
return "Page 3";
}
return null;
}
FragmentTabHost也是一个选项。
此代码来自Android开发者网站:
/**
* This demonstrates how you can implement switching between the tabs of a
* TabHost through fragments, using FragmentTabHost.
*/
public class FragmentTabs extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_tabs);
mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
FragmentStackSupport.CountingFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
LoaderCursorSupport.CursorLoaderListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
LoaderCustomSupport.AppListFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
}
}
我发现这些教程在将动作栏(现在称为“工具栏”-argh)组合在一起时非常有用,该动作栏通过Material Design支持滑动选项卡:
https://www.youtube.com/watch?v=Fl0xMuo10yA
您必须综合这些资源来匹配您的特定情况。例如,您可能不希望以与exoguru.com教程相同的样式手动创建选项卡。
我认为当您拥有三到五个同等重要性的屏幕时,BottomNavigationActivity是一个合适的替代方法,可以用来切换片段。
您会注意到Android Studio中存在用于此操作的向导,但是请注意,因为Android Studio倾向于生成过于复杂的样板代码。
可以在这里找到教程:https : //android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f
可以在此处的Android Hive中找到另一个质量教程:https : //www.androidhive.info/2017/12/android-working-with-bottom-navigation/