如何在点击时不更改底部导航视图项目颜色

问题描述 投票:0回答:6

我的

bottomNavigationView

中有三件物品

当我单击个人资料项目时,代码会检查此人是否已登录。如果该人未登录,那么我需要开始一个新的

Activity
,否则我需要在我的
fragment
中加载
frameLayout

现在的问题是,当我单击配置文件项目并且该人未登录时,活动就会开始,但是当我单击返回时,配置文件项目会突出显示,但主页片段会加载到框架布局中。

我尝试了以下方法来解决这个问题

1)我使用

setSelectedItemId
在单击配置文件项目时设置项目颜色,但它不起作用

还有其他方法可以做到这一点吗?

android android-fragments android-fragmentactivity bottomnavigationview
6个回答
7
投票

我终于知道如何做到这一点,我在这里分享

如果您不想更改项目的颜色,则需要返回 false

bottomNavigationView.setOnNavigationItemSelectedListener(
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.action_home:
                            HomeFragment fav_frag = new HomeFragment();
                            currentFragment = fav_frag;
                            loadfragment(fav_frag);
                            break;
                        case R.id.action_designers:
                          break;
                        case R.id.action_profile:
                            if(PreferenceManager.getDefaultSharedPreferences(BaseActivity.this).getString("customer_id","").equalsIgnoreCase("")){
                                Intent intent=new Intent(BaseActivity.this,LoginActivity.class);
                                intent.putExtra("Target","Profile");
                                startActivity(intent);
                                overridePendingTransition(R.anim.slide_up,R.anim.stable);
// Here is the key , you need to return false when you don't want to change the items color
                                return false;
                            }else {
                                ProfileFragment accountFragment = new ProfileFragment();
                                currentFragment=accountFragment;
                                loadfragment(accountFragment);

                            }


                            break;
                    }
                    return true;
                }
            });

1
投票

试试这个。

selector
添加到您的代码中。

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

然后添加您的xml代码。

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:itemIconTint="@drawable/selector_navigation"
    app:itemTextColor="@drawable/selector_navigation"
    app:menu="@menu/menu_navigation"/>

注意

// icon 
app:itemIconTint="@drawable/selector_navigation"
// text
app:itemTextColor="@drawable/selector_navigation"

0
投票

你可以试试

<android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/toolbar_background"
            app:itemIconTint="@color/bottom_nac_color"
            app:itemTextColor="@color/bottom_nac_color"
            app:menu="@menu/bottom_navigation_main" />

这里

@color/bottom_nac_color
是你想要在屏幕上显示的颜色

希望它有效


0
投票

你可以通过这样的java代码进行更改。

更新:

 bottomNav.addItemNav(new ItemNav(this, R.drawable.ic_home, getResources().getString(R.string.home)).addColorAtive(R.color.yellow_selected_color).addColorInative(R.color.text_color));

0
投票

return false
就是这样,因为启动活动时我们不需要突出显示菜单项


0
投票

可能您在 onNavigationItemSelected 中使用 switch 来进行底部导航,并且在每种情况下都返回 true 。

对于您不想更改颜色的每个项目,返回 false,对于当用户单击项目时更改颜色返回 true。

bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
        @SuppressLint("NonConstantResourceId")
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.one:
                    // your code
                    return true; // on click will change color
                case R.id.two:
                    // your code 
                    return false; // on click will not change color
            }
            return false;
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.