【问题标题】:Bottom Navigation View text style on selected item底部导航查看所选项目上的文本样式
【发布时间】:2018-07-19 20:13:50
【问题描述】:

如何在BottomNavigationView 的选中项 上应用文本样式? 我可以更改颜色,但无法弄清楚如何更改所选菜单项上的字体样式(如字体系列或使其变为粗体/斜体)。有没有办法只使用 XML 来做到这一点?

在上面的示例图片中,我只希望 SEARCH 使用不同的字体和粗体。 MESSAGE 和 DASHBOARD 保持不变。

在活动 xml 中:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="0dp"
    android:layout_height="49dp"
    android:background="?android:attr/windowBackground"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    app:itemIconTint="@color/bottom_nav_color"
    app:itemTextColor="@color/bottom_nav_color"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation"/>

res/menu/navigation.xml

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

    <item
        android:id="@+id/navigation_search"
        android:icon="@drawable/ic_search"
        android:title="SEARCH" />

    <item
        android:id="@+id/navigation_messages"
        android:icon="@drawable/ic_question_answer"
        android:title="MESSAGES" />

    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="DASHBOARD" />
</menu>

res/color/bottom_nav_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/colorPrimary" />
    <item android:state_checked="false" android:color="#666666"/>
</selector>

【问题讨论】:

    标签: android bottomnavigationview


    【解决方案1】:

    BottomNavigationView中有itemTextAppearanceActive和itemTextAppearanceInactive属性。只需在 res/values/styles.xml 中创建一个样式:

    <style name="BottomNavigation.ActiveItemTextAppearance" parent="TextAppearance.AppCompat">
        <item name="android:textStyle">bold</item>
        <item name="android:fontFamily">@font/whatever</item>
    </style>
    

    然后在BottomNavigationView中引用它:

    app:itemTextAppearanceActive="@style/BottomNavigation.ActiveItemTextAppearance"
    

    对于非活动项目,反之亦然。

    【讨论】:

      【解决方案2】:

      我认为这里值得一提的是,通过更改文本样式,您不会更改文本颜色。因此它仍然需要使用app:itemTextColor

      <com.google.android.material.bottomnavigation.BottomNavigationView
      ...
              app:itemIconTint="@color/bottom_nav_color_selector"
              app:itemTextColor="@color/bottom_nav_color_selector"
              app:itemTextAppearanceInactive="@style/BottomNavigationText"
              app:itemTextAppearanceActive="@style/BottomNavigationText.Selected"
              tools:menu="@menu/menu_bottom_navigation"
              />
      

      bottom_nav_color_selector in res/colors

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:color="@color/bottom_nav_selected" android:state_checked="true" />
          <item android:color="@color/bottom_nav_normal" />
      </selector>
      

      样式

      <style name="BottomNavigationText" parent="@android:style/TextAppearance"/>
      <style name="BottomNavigationText.Selected">
          <item name="android:textStyle">bold</item>
      </style>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-24
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-13
        • 2017-09-15
        • 2017-06-09
        相关资源
        最近更新 更多