Android Studio BottomNavigationView проблема с пиктограммой - PullRequest
3 голосов
/ 21 марта 2019

Я использую BottomNavigationView для своего приложения.Все круто, но когда у меня более 3 предметов, предметы перемещаются по клику.

Я имею в виду, выделенный элемент, получить больше границ, а остальные отменили выбор элемента, отойти, слипшись.

Но моя идея - это меню навигации, как в Instagram.Если я щелкну по элементу моего меню навигации, все элементы останутся неподвижными и не начнут двигаться влево или вправо.

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Во-первых, вы должны добавить это в файл размеров:

<dimen name="design_bottom_navigation_text_size" tools:override="true">10sp</dimen>
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">10sp</dimen>

Затем примените для каждого элемента на панели:

@SuppressLint("PrivateResource")
fun BottomNavigationView.fixSelectedItem(position: Int) {
    val bottomMenu = this.getChildAt(0) as? BottomNavigationMenuView
    val item = bottomMenu?.getChildAt(position) as? BottomNavigationItemView
    item?.let {
        val activeLargeLabel = it.findViewById<TextView>(com.google.android.material.R.id.largeLabel)

        if (activeLargeLabel != null && activeLargeLabel is TextView) {
            activeLargeLabel.setPadding(0, 0, 0, 0)
            activeLargeLabel.ellipsize = TextUtils.TruncateAt.END
        }
    }
}

ПРИМЕЧАНИЕ: эти имена design_bottom_navigation_ и com.google.android.material.R могут отличаться в Support Legacy libs.Это из AndroidX.

Это обходной путь, как исправить эффект масштаба.

0 голосов
/ 22 марта 2019

Вы можете использовать это для отображения текста и значков в BottomNevigationView для 3-5 элементов и прекращения смещения.

 app:labelVisibilityMode="labeled"

Но вы столкнетесь с проблемой сокращения длинного текста в BottmNevigationView для 5 элементов.для этого я нашел хорошее решение для остановки смещения текста, а также иконки BottomNevigationView.Вы также можете остановить смещение текста и значков в BottomNevigationView.Фрагменты кода приведены здесь.

1.Добавьте эту строку кода в BottomNevigationView, как показано

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="@dimen/seventy_dp"
    android:layout_semitransparent="true"
    android:background="@color/colorBottomNev"
    android:showAsAction="always|withText"
    app:itemIconTint="@drawable/bottom_navigation_colors"
    app:itemTextColor="@drawable/bottom_navigation_colors"
    app:itemTextAppearanceActive="@style/BottomNavigationViewTextStyle"
    app:itemTextAppearanceInactive="@style/BottomNavigationViewTextStyle"
    app:menu="@menu/bottom_navigation_menu"
    app:labelVisibilityMode="labeled"/>

2.Добавьте пункты меню, как показано ниже: -

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_catalogue"
        android:icon="@drawable/catalogue"
        android:title="@string/catalogue"
        android:enabled="true"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_contracts"
        android:icon="@drawable/contract"
        android:title="@string/contracts"
        android:enabled="true"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_prospects"
        android:icon="@drawable/prospect"
        android:title="@string/prospects"
        android:enabled="true"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_performance"
        android:icon="@drawable/performance"
        android:title="@string/performance"
        android:enabled="true"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_advance"
        android:icon="@drawable/advance"
        android:title="@string/advance"
        android:enabled="true"
        app:showAsAction="ifRoom" />

</menu>

3. Добавьте этот стиль в файл style.xml:

 <style name="BottomNavigationViewTextStyle">
            <item name="android:fontFamily">@font/montmedium</item>
            <item name="android:textSize">10sp</item>
            <item name="android:duplicateParentState">true</item>
            <item name="android:ellipsize">end</item>
            <item name="android:maxLines">1</item>
        </style>

4) Добавьте их в папку Dimen

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_bottom_navigation_text_size" tools:override="true">10sp</dimen>
    <dimen name="design_bottom_navigation_active_text_size" tools:override="true">10sp</dimen>
</resources>

Я получил помощь по этим ссылкам и ссылкам . Вы также можете получить помощь, изучив эти ссылки.Это мне очень помогает. Надеюсь, это также поможет вам.Спасибо ....

0 голосов
/ 21 марта 2019

Реализация BottomNavigationView имеет условие: если имеется более 3 элементов, используйте режим сдвига. поэтому, чтобы отключить этот эффект, вы должны добавить эту строку кода в BottomNavigationView XML

app:labelVisibilityMode="labeled"

PS: вам нужна библиотека поддержки 28.0.0 и выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...