Java 为什么在项目上设置文本后,我的项目导航抽屉的字体会更改?
以下是我的职能: 在这个函数中,我在单击一些按钮后定义了抽屉布局,并调用了set navigation itemsJava 为什么在项目上设置文本后,我的项目导航抽屉的字体会更改?,java,android,xml,android-studio,Java,Android,Xml,Android Studio,以下是我的职能: 在这个函数中,我在单击一些按钮后定义了抽屉布局,并调用了set navigation items private void setNavigationView() { DrawerLayout drawerLayout = findViewById(R.id.drawable_main); ImageView menuBtn = findViewById(R.id.drawer_btn); menuBtn.setOnClickListener(view
private void setNavigationView() {
DrawerLayout drawerLayout = findViewById(R.id.drawable_main);
ImageView menuBtn = findViewById(R.id.drawer_btn);
menuBtn.setOnClickListener(view -> drawerLayout.openDrawer(Gravity.RIGHT));
setNavigationItems();
}
在这个函数中,我设置了保存在共享首选项中的城市名称,并调用了一些项目:
private void setNavigationItems() {
sharedPrfManager = new SharedPrfManager(MainActivity.this);
navigationView = findViewById(R.id.navigationView_id);
View header = navigationView.getHeaderView(0);
setItemNavigation();
btn_join = header.findViewById(R.id.button_joinOrEnter);
navigationView.setNavigationItemSelectedListener(menuItem -> {
switch (menuItem.getItemId()) {
case R.id.drawer_userpannel:
break;
case R.id.drawer_chooseCity:
Intent intentGetCity = new Intent(MainActivity.this,CityActivity.class);
startActivityForResult(intentGetCity , 2);
break;
case R.id.drawer_favorites:
break;
case R.id.drawer_connect_us:
break;
case R.id.drawer_rate_app:
break;
case R.id.drawer_shares:
break;
}
return true;
});
}
在这个函数中,我从城市活动中选择了城市,然后调用setItemNavigation()从共享首选项设置城市名称:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2 && resultCode==RESULT_OK)
{
if (data != null){
sharedPrfManager.saveCity(data.getStringExtra("nameCity"),data.getIntExtra("idCity",0));
setItemNavigation();
}
}
}
private void setItemNavigation() {
Menu menuitemView = navigationView.getMenu();
MenuItem menucity = menuitemView.findItem(R.id.drawer_chooseCity);
if (sharedPrfManager.getCityId() != 0)
{
menucity.setTitle( "انتخاب شهر(" + sharedPrfManager.getCityName() + ")");
}
}
我的菜单项在那里:
<item
android:id="@+id/drawer_userpannel"
android:title="@string/str_user_pannel"
android:icon="@drawable/ic_user_pannel"
/>
<item
android:id="@+id/drawer_chooseCity"
android:title="@string/str_choose_city"
android:icon="@drawable/ic_location"/>
<item
android:id="@+id/drawer_favorites"
android:title="@string/str_favorites"
android:icon="@drawable/ic_heart"/>
<item
android:id="@+id/drawer_connect_us"
android:title="@string/str_connect_us"
android:icon="@drawable/ic_contact_us"/>
<item
android:id="@+id/drawer_rate_app"
android:title="@string/str_rate_app"
android:icon="@drawable/ic_favorite_1"/>
<item
android:id="@+id/drawer_shares"
android:title="@string/str_shares"
android:icon="@drawable/ic_share"/>
您可以看到,在使用程序之前,我为选择城市调用了相同的函数,启动程序之后,我从导航项目中选择城市,但我不知道为什么在设置一个项目的文本后,我的项目的某些字体会发生变化!
谢谢你的回复。我的第一个建议是使用 但您也可以使用此功能手动设置导航的字体: 在简历上写下以下内容:
Menu m = navigationView.getMenu();
for (int i = 0; i < m.size(); i++) {
MenuItem mi = m.getItem(i);
//for aapplying a font to subMenu ...
SubMenu subMenu = mi.getSubMenu();
if (subMenu != null && subMenu.size() > 0) {
for (int j = 0; j < subMenu.size(); j++) {
MenuItem subMenuItem = subMenu.getItem(j);
applyFontToMenuItem(subMenuItem);
}
}
//the method we have create in activity
applyFontToMenuItem(mi);
}
private void applyFontToMenuItem(MenuItem mi) {
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Vazir-Bold-FD.ttf");
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypefaceSpan("", font), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}