#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 -> 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 amp;amp; 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"/>
вы можете видеть, что я вызвал ту же функцию для выбора города перед использованием program и после запуска program затем выберите город из элементов навигации, но я не знаю, почему некоторые шрифты моего элемента меняются после установки текста одного элемента! спасибо за ваши ответы.
Ответ №1:
мое первое предложение — использовать каллиграфию, но вы также можете использовать эту функцию для настройки шрифта для вашей навигации вручную:
напишите это onResume:
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 amp;amp; 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);
}