当我选择其他项目时,BottomNavigationView中的第一项会保持突出显示

时间:2018-03-22 06:10:45

标签: android android-navigation

导航栏中的第一项始终突出显示。

当我点击导航栏上的其他项目时,内容将会更改,但相应的项目不会突出显示,只需突出显示第一项。

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment=null;
            switch (item.getItemId()){
                case R.id.number:
                    fragment=new data();
                    break;
                case R.id.graph:
                    fragment=new graph();
                    break;
            }
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.content_drawer, fragment);
            fragmentTransaction.commit();
            return true;
        }
    });

这是听众

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    app:menu="@menu/navigation" />

<LinearLayout
    android:id="@+id/graphlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/navigation"
    android:orientation="vertical"
    android:gravity="center_vertical">

</LinearLayout>
</RelativeLayout>

这是xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@+id/number"
    android:title="number"
    android:checkable="true"/>

<item
    android:id="@+id/graph"
    android:title="graph"
    android:checkable="true"/>

</menu>

这是meun.xml

2 个答案:

答案 0 :(得分:0)

它包含在设计支持库中,从版本25.0.0开始。您可以使用以下行将其包含在build.gradle文件中(您还需要AppCompat支持库作为设计支持库的依赖项):

首先使用腰带编译项目中的腰带

compile 'com.android.support:appcompat-v7:25.0.0'  
compile 'com.android.support:design:25.0.0'  

然后创建xml布局:

<android.support.design.widget.BottomNavigationView  
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:itemBackground="@color/darkGrey"
    app:itemIconTint="@color/bottom_navigation_item_background_colors"
    app:itemTextColor="@color/bottom_navigation_item_background_colors"
    app:menu="@menu/menu_bottom_navigation" />

创建资源文件,就像导航抽屉或溢出菜单一样:

<?xml version="1.0" encoding="utf-8"?>  
<menu  
xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/action_one"
    android:icon="@android:drawable/ic_dialog_map"
    android:title="One"/>
<item
    android:id="@+id/action_two"
    android:icon="@android:drawable/ic_dialog_info"
    android:title="Two"/>
<item
    android:id="@+id/action_three"
    android:icon="@android:drawable/ic_dialog_email"
    android:title="Three"/>
<item
    android:id="@+id/action_four"
    android:icon="@android:drawable/ic_popup_reminder"
    android:title="Four"/>
</menu>  

显示以下图片:

enter image description here

要为所选项目实现不同的着色,您应该将颜色列表资源指定为itemBackground和itemTextColor,如下所示:

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

<item
    android:color="@color/colorAccent"
    android:state_checked="false"/>
<item
    android:color="@android:color/white"
    android:state_checked="true"/>

 </selector>  

最后,您可以通过setOnNavigationItemSelectedListener()方法添加BottomNavigation.OnNavigationItemSelectedListener来监听标签选择事件:

bottomNavigationView.setOnNavigationItemSelectedListener(new 
BottomNavigationView.OnNavigationItemSelectedListener() {  
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    Fragment fragment = null;
    switch (item.getItemId()) {
        case R.id.action_one:
            // Switch to page one
            break;
        case R.id.action_two:
            // Switch to page two
            break;
        case R.id.action_three:
            // Switch to page three
            break;
    }
    return true;
   }
   });

试试这段代码。

答案 1 :(得分:0)

这通常发生在 onNavigationItemSelected 方法返回 false 值时。您可以在 onNavigationItemSelected 方法中删除除返回true 之外的所有代码来检查此项。就像这样;

bottomNavigationView.setOnNavigationItemSelectedListener(new 
BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {            
       return true;
    }
});

然后你会看到它有效,但内容没有改变。对于内容更改,如果我是你,我会将默认返回值更改为false;

bottomNavigationView.setOnNavigationItemSelectedListener(new 
BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()){
            case R.id.number:
               //Open fragment or do whatever you want.
               return true;
            case R.id.graph:
               //Open another fragment or do whatever you want.
               return true;
        }
    return false;
}
});