从Android支持设计的导航抽屉中删除滚动条?

16

我刚刚将支持设计库从22.2.1更新到23.0.1,立即发现导航抽屉里出现了滚动条。我尝试使用

android:scrollbars="none"

但是那并没有解决问题。是否还有其他方法可以去掉滚动条?


我可以问一下你是否找到了最近的一篇有关如何实现导航抽屉的文章吗?许多文章至少已经一年以上了。 - Stephane
1
@StephaneEybert 我刚从Github下载了Chris Banes的Cheesesquare示例,并从那里复制了它。 - qwertz
4个回答

39

很不幸,滚动条被设置在 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);
        }
    }
}

10
您也可以在style.xml中使用以下样式:
<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>

0

可以在样式中的apptheme中使用:

<item name="android:scrollbarThumbVertical">@android:color/transparent</item>


0

我尝试在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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接