Как управлять пропуском между значком меню и текстом, когда они пересекаются после щелчка, для BottomNavigationView? - PullRequest
0 голосов
/ 18 октября 2018

Я увеличил размер " значок меню ", и поэтому он перекрывается с " текст меню ".

Так что мне удалосьразрыв между ними, используя следующий метод "menuAlignment ()" , но как-то после нажатия на " пункт меню ", разрыв между " менюзначок"и" текст меню"возвращается в прежнее состояние, т.е. перекрывается, пожалуйста, помогите мне в этом.

Мой код выглядит следующим образом:

    public void menuAlignment()
    {
        for (int i = 0; i < menuView.getChildCount(); i++) {
            final View iconView = menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);

            final FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) iconView.getLayoutParams();
            final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            // set your height here
            layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 27, displayMetrics);
            // set your width here
            layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 28, displayMetrics);

            layoutParams.gravity=Gravity.CENTER_HORIZONTAL;
            layoutParams.setMargins(0,0,0,200);

            iconView.setLayoutParams(layoutParams);

            //  iconView.setPadding(0, 0, 0, 10);
        }
}

Код для navigationClickListener : -

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_jokes_word:
                    loadFragment(new JokesFragment());
                    menuAlignment();
                    return true;
                case R.id.navigation_jokes_images:
                    loadFragment(new ImageJokesFragment());
                    menuAlignment();
                    return true;
            }
            return false;
        }
    };

navigation.xml [menu.xml]

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/navigation_word"
        android:icon="@drawable/digital"
        android:title="@string/title_jokes_word"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/navigation_images"
        android:icon="@drawable/images"
        android:title="@string/title_jokes_images" />


</menu>

Снимок экрана MyActivity:

Меню BottomNavigationView

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Вид пункта меню

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_home"
    android:icon="@drawable/ic_home_blue_48dp"
    android:title="Home" />
<item
    android:id="@+id/action_menu"
    android:icon="@drawable/ic_apps_black_24dp"
    android:title="Menu"
     />
<item
    android:id="@+id/action_msg"
    android:icon="@drawable/ic_chat_black_24dp"
    android:title="Message Inbox"
   />
</menu>

click listener

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item)
        {
            Fragment selectedFragment = null;
            switch (item.getItemId())
            {
                case R.id.action_home:
                    /*hide extra toolbars*/
                    hideViews();
                    /*hide back button*/
                    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                    selectedFragment = new TimelineFragment();
                    break;
                case R.id.action_menu:
                    hideViews();
                    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                    selectedFragment = new HomeFragment();
                    break;
                case R.id.action_msg:
                    hideViews();
                    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                    selectedFragment = new ChatFragment();
                    break;
            }
0 голосов
/ 22 октября 2018

использовать настраиваемый макет, установленный в пункте меню, например:

<item
android:id="@+id/menu_item_1" 
app:showAsAction="always"
app:actionLayout="@layout/custom_menu_item_1" />

создать файл макета и использовать этот набор файлов в качестве приложения: actionLayout.

custom_menu_item_1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/menu_drawable"
    android:orientation="vertical">

    <ImageView ... marginBottom=".." />
    <TextView  ... />
</LinearLayout>
...