选中时,BottomNavigationView图标不会更改颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选中时,BottomNavigationView图标不会更改颜色相关的知识,希望对你有一定的参考价值。
我试过在我的应用程序中使用BottomNavigationView。
当我单击图标片段时,正确显示片段,但图标在选择时不会更改其颜色,第一个片段的图标保持彩色。 It looks like this whatever fragment I choose
我做错了什么或者所选片段的图标颜色是单独调整的吗?
我的主要活动:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener
private Toolbar toolbar;
public static FloatingActionButton addDeadline;
BottomNavigationView bottomNavigationView;
FrameLayout frameLayout;
private HomeFragment homeFragment;
private RecyclerViewFragment recyclerViewFragment;
private HistoryFragment historyFragment;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_drawer);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);// language configuration
String lang = getResources().getConfiguration().locale.getDisplayLanguage(Locale.CHINESE);
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
toolbar = findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);
homeFragment = new HomeFragment();
recyclerViewFragment = new RecyclerViewFragment();
historyFragment = new HistoryFragment();
frameLayout = findViewById(R.id.main_frame);
bottomNavigationView = findViewById(R.id.navigation_view);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
switch (item.getItemId())
case R.id.nav_home:
addDeadline.show();
setFragment(homeFragment);
break;
case R.id.nav_deadlines:
addDeadline.show();
setFragment(recyclerViewFragment);
break;
case R.id.nav_history:
addDeadline.hide();
setFragment(historyFragment);
break;
return false;
);
addDeadline = findViewById(R.id.addTask);
addDeadline.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent();
intent.setClass(MainActivity.this, AddTaskActivity.class);
startActivityForResult(intent, INTENT_REQUEST_CODE);
);
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawerLayout, toolbar, R.string.open, R.string.close);
drawerLayout.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = findViewById(R.id.navigation);
navigationView.setNavigationItemSelectedListener(this);
private void setFragment(Fragment fragment)
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.main_frame, fragment);
fragmentTransaction.commit();
@Override
public void onBackPressed()
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START))
drawer.closeDrawer(GravityCompat.START);
else
super.onBackPressed();
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item)
switch (item.getItemId())
case R.id.labels:
startActivity(new Intent(this, TagsActivity.class));
return true;
case R.id.notifications:
// startActivity(new Intent(this, HistoryActivity.class));
return true;
case R.id.info:
// startActivity(new Intent(this, HistoryActivity.class));
return true;
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
activity_main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation_view"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_gravity="bottom"
app:menu="@menu/bottom_navigation_bar" />
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:id="@+id/appBarLayout"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_main"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_gravity="top"
android:background="@drawable/shadow_under"
android:layout_marginTop="56dp"/>
<FrameLayout
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:layout_marginBottom="56dp">
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_gravity="bottom"
android:background="@drawable/shadow_above"
android:layout_marginBottom="0dp"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/addTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginTop="@dimen/fab_margin"
android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin"
android:src="@drawable/ic_add"
app:fabSize="auto"
app:layout_constraintBottom_toTopOf="?attr/actionBarSize" />
</FrameLayout>
</RelativeLayout>
答案
在OnNavigationItemSelectedListener实现中,make item.setChecked(true);对于每个案例项目
mBottomNavigationView.setOnNavigationItemSelectedListener(item ->
switch (item.getItemId())
case R.id.action_overview:
item.setChecked(true);
mNavigationController.navigateToDashboardMainFragment();
break;
return false;
);
另一答案
您应该将图标色调和文本颜色设置为BottomNavigationView。
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation_view"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_gravity="bottom"
app:itemIconTint="@color/bottom_nav_color_state"
app:itemTextColor="@color/bottom_nav_color_state"
app:menu="@menu/bottom_navigation_bar" />
使用以下代码在目录bottom-nav_color_state.xml
上创建res/color
文件:
<?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="true"/>
<item android:color="@color/colorPrimaryDark"/>
</selector>
如果未选择图标,则会以彩色qazxsw poi显示。否则qazxsw poi将是颜色。
以上是关于选中时,BottomNavigationView图标不会更改颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BottomNavigationView 中设置所选项目
在 Android BottomNavigationView 中设置所选项目
Android BottomNavigationView 底部导航组件使用