我刚刚将支持设计库从22.2.1更新到23.0.1,立即发现导航抽屉里出现了滚动条。我尝试使用
android:scrollbars="none"
但是那并没有解决问题。是否还有其他方法可以去掉滚动条?
我刚刚将支持设计库从22.2.1更新到23.0.1,立即发现导航抽屉里出现了滚动条。我尝试使用
android:scrollbars="none"
但是那并没有解决问题。是否还有其他方法可以去掉滚动条?
很不幸,滚动条被设置在 NavigationMenuView
布局中而不是 NavigationView
中,因此如果您使用 android:scrollbars="none"
,滚动条仍然存在。
您可以通过调用此方法以编程方式完成:
private void disableNavigationViewScrollbars(NavigationView navigationView) {
if (navigationView != null) {
NavigationMenuView navigationMenuView = (NavigationMenuView) navigationView.getChildAt(0);
if (navigationMenuView != null) {
navigationMenuView.setVerticalScrollBarEnabled(false);
}
}
}
<item name="android:scrollbarThumbVertical">@color/transparent</item>
if you don't have a transparent color defined in colors.xml, use the android library "transparent" with: <item name="android:scrollbarThumbVertical">@android:color/transparent</item>
可以在样式中的apptheme中使用:
<item name="android:scrollbarThumbVertical">@android:color/transparent</item>
我尝试在Kotlin中实现这个,希望能有所帮助。 首先,创建不同的片段和任何你想要的导航,然后创建一个函数,用于将片段加载到活动中。
when (item.getItemId()) {
R.id.home -> {
//this is the name of the method I am using for adding fragments
//with bottom navigation bar you can use it with any type o navigation.
loadFragment(getString(R.string.home_fragment), HomeFragment());
appBar.title = "Home"
return true
}
R.id.jobs -> {
loadFragment(getString(R.string.jobs_fragment), JobsFragment());
appBar.title = "Jobs"
return true
}
接下来是方法
private fun loadFragment(tag: String,loadFragment: Fragment) {
val fManager = supportFragmentManager
val fTransaction = fManager.beginTransaction()
val fragment = fManager.findFragmentByTag(tag)
if (fragment == null) {
fTransaction.replace(R.id.activity_main_content_main, loadFragment,tag);
} else { // re-use the old fragment
fTransaction.replace(R.id.activity_main_content_main, fragment, tag);
}
fTransaction.addToBackStack(tag);
fTransaction.commit();
}
首先,val fragment = fManager.findFragmentByTag(tag) 这个操作将会搜索已经加载过的 fragment,如果成功找到,则会执行 if 语句并展示 preloaded 的 fragment;但是如果没有找到,则会执行 else 语句。如果传递给 loadFragment 参数的值包含你想要加载的 fragment,则会执行 if 语句,载入传递的 fragment。