Удалить полосу прокрутки из навигационного ящика с поддержкой дизайна Android?

Я только что обновил библиотеку дизайна поддержки с 22.2.1 до 23.0.1 и сразу заметил наличие полосы прокрутки в навигационном ящике. Я попытался использовать

android:scrollbars="none"

Но это не исправить. Есть ли другой способ удалить панель прокрутки?

Ответ 1

К сожалению, полоса прокрутки установлена ​​в макете 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);
        }
    }
}

Ответ 2

Вы также можете использовать следующий стиль в вашем 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>

Ответ 3

Я пытался сделать это в Котлине, надеюсь, это поможет. во-первых, создайте различные фрагменты и любую навигацию, которую вы хотите, после этого создайте функцию, которая будет использоваться для загрузки фрагментов в действие.

    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 фрагмент = fManager.findFragmentByTag (тег), который будет искать, если фрагмент уже загружен, тогда будет выполнен оператор else, и будет показан предварительно загруженный фрагмент, но если нет, то переданный нами параметр loadFragment содержит фрагмент, который вы хотите загрузить, затем оператор if будет выполнен, который загрузит переданный фрагмент.

Ответ 4

Вы можете использовать его в стиле apptheme:

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