почему шрифт моего ящика навигации по элементам меняется после установки текста в элементе?

#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);
        }