使用androidx的BottomNavigationView

Posted

技术标签:

【中文标题】使用androidx的BottomNavigationView【英文标题】:BottomNavigationView using androidx 【发布时间】:2020-01-09 17:47:58 【问题描述】:

我创建了一些应用程序,我想在其中插入一个 BottomNavigationView。

代码运行良好,但是一旦我将 gradle 更改为 androidx,它就停止工作了。

我的布局中的组件(activity_about):

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_
    android:layout_
    app:menu="@menu/bottom_navigation"
    app:itemBackground="@color/colorWhite"
    app:itemIconTint="@drawable/bottom_navigation_foreground"
    app:itemTextColor="@drawable/bottom_navigation_foreground" />

菜单文件是:

<?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/navigation_library"
    android:enabled="true"
    app:showAsAction="ifRoom"
    android:title="Library"
    android:icon="@drawable/ic_home_black_24dp"/>

<item
    android:id="@+id/navigation_search"
    android:enabled="true"
    app:showAsAction="ifRoom"
    android:title="Search"
    android:icon="@drawable/ic_search_black_24dp"/>

<item
    android:id="@+id/navigation_profile"
    android:enabled="true"
    app:showAsAction="ifRoom"
    android:title="Profile"
    android:icon="@drawable/ic_account_circle_black_24dp"/>
</menu>

可绘制文件(bottom_navigation_foreground):

<?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/colorPurpleFont" />
    <item android:state_checked="false" android:color="@color/Gray"  />
</selector>

我的代码如下:

public class AboutActivity extends AppCompatActivity 

    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);

        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() 
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) 
                switch (item.getItemId()) 
                    case R.id.navigation_library:
                        startActivity(new Intent(AboutActivity.this, DiscoverActivity.class));
                        break;
                    case R.id.navigation_search:
                        Toast.makeText(AboutActivity.this, "Favorites", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.navigation_profile:
                        Toast.makeText(AboutActivity.this, "Nearby", Toast.LENGTH_SHORT).show();
                        break;
                
                return true;
            
        );
    

自从我更改为 androidx 后它无法正常工作的任何原因?

谢谢

【问题讨论】:

【参考方案1】:

使用androidx你必须在Material components library中切换到BottomNavigationView

build.gradle中添加dependency

dependencies 
   //..
   implementation 'com.google.android.material:material:1.2.1'

使用material theme 并添加到您的布局中:

<com.google.android.material.bottomnavigation.BottomNavigationView
 .../>

【讨论】:

【参考方案2】:

我已经通过替换解决了同样的问题

<android.support.design.widget.BottomNavigationView

>

将其更改为并同时实现依赖项

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_
        android:layout_
        >

在 build.gradle 中

    implementation 'com.google.android.material:material:1.2.0'

参考安卓文档 https://developer.android.com/reference/com/google/android/material/bottomnavigation/BottomNavigationView

【讨论】:

以上是关于使用androidx的BottomNavigationView的主要内容,如果未能解决你的问题,请参考以下文章

AndroidX适配与升级指南

AndroidX适配与升级指南

AndroidX迁移-androidx.legacy:legacy-support-v4或androidx.appcompat:appcompat

使用androidx的BottomNavigationView

AndroidX全解析

带有 --androidx 的新 Flutter 项目出现 AndroidX 不兼容错误