android - নীচে নেভিগেশনভিউ লেবেলগুলি সরান




android-support-library androiddesignsupport (6)

আপনি কি এই স্টাইল করতে চান?

যদি তা হয় তবে আমি আপনাকে BottomNavigationViewEx চেষ্টা করার পরামর্শ BottomNavigationViewEx

গুগল বটমনাভিগেশনভিউয়ের সাথে নতুন সমর্থন লাইব্রেরি v25 প্রকাশ করেছে

আইটেম লেবেল অপসারণ করার কোন উপায় আছে?


আমি শিফট অ্যানিমেশন এবং লেবেল উভয়ই সরিয়ে ফেলতে চেয়েছিলাম এবং এখানকার কোনও সমাধানই আমার পক্ষে ভাল কাজ করে নি, তাই আমি এখানে যা শিখেছি তার উপর ভিত্তি করে আমি এখানে একটি তৈরি করেছি:

public void removeLabels(@IdRes int... menuItemIds) {
    getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override public boolean onPreDraw() {
            getViewTreeObserver().removeOnPreDrawListener(this);

            // this only needs to be calculated once for an unchecked item, it'll be the same value for all items
            ViewGroup uncheckedItem = findFirstUncheckedItem(menuItemIds);
            View icon = uncheckedItem.getChildAt(0);
            int iconTopMargin = ((LayoutParams) uncheckedItem.getChildAt(0).getLayoutParams()).topMargin;
            int desiredTopMargin = (uncheckedItem.getHeight() - uncheckedItem.getChildAt(0).getHeight()) / 2;
            int itemTopPadding = desiredTopMargin - iconTopMargin;

            for (int id : menuItemIds) {
                ViewGroup item = findViewById(id);
                // remove the label
                item.removeViewAt(1);
                // and then center the icon
                item.setPadding(item.getPaddingLeft(), itemTopPadding, item.getPaddingRight(),
                        item.getPaddingBottom());
            }

            return true;
        }
    });
}

@SuppressLint("RestrictedApi")
private ViewGroup findFirstUncheckedItem(@IdRes int... menuItemIds) {
    BottomNavigationItemView item = findViewById(menuItemIds[0]);
    int i = 1;
    while (item.getItemData().isChecked()) {
        item = findViewById(menuItemIds[i++]);
    }
    return item;
}

আপনার কাস্টম BottomNavigationView নেভিগেশনভিউতে এই পদ্ধতিটি যুক্ত করুন এবং এটিকে মেনু আইটেমগুলির BottomNavigationView অতিক্রম করে বলুন।


এটি একটি অস্থায়ী সমাধান। কেবল যুক্ত করুন: app:itemTextColor="@android:color/transparent" যা ব্যাকগ্রাউন্ডের রঙ যাই হোক না কেন এটি অক্ষম করে app:itemTextColor="@android:color/transparent" । এটি আইকনটিকে উন্নত দেখায়।


দুর্ভাগ্যক্রমে নীচে নেভিগেশনভিউয়ের এই প্রথম সংস্করণটি অনেক সীমাবদ্ধতার সাথে এসেছিল। এবং আপাতত আপনি সমর্থন ডিজাইন এপিআই ব্যবহার করে শিরোনামগুলি সরাতে পারবেন না। সুতরাং গুগল এটি প্রয়োগ না করে এই সীমাবদ্ধতা সমাধানের জন্য, আপনি এটি করতে পারেন (প্রতিবিম্ব ব্যবহার করে):

1. নীচের_নভিশন_মেনু.এক্সএমএল ফাইল থেকে শিরোনামগুলি খালি সেট করুন।

2. নীচে নেভিগেশন ভিউ প্রসারিত:

    public class MyBottomNavigationView extends BottomNavigationView {

      public MyBottomNavigationView(Context context, AttributeSet attrs) {
          super(context, attrs);
          centerMenuIcon();
      }

      private void centerMenuIcon() {
          BottomNavigationMenuView menuView = getBottomMenuView();

          if (menuView != null) {
              for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);

                AppCompatImageView icon = (AppCompatImageView) menuItemView.getChildAt(0);

                FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
                params.gravity = Gravity.CENTER;

                menuItemView.setShiftingMode(true);
              }
          }
      }

      private BottomNavigationMenuView getBottomMenuView() {
          Object menuView = null;
          try {
              Field field = BottomNavigationView.class.getDeclaredField("mMenuView");
              field.setAccessible(true);
              menuView = field.get(this);
          } catch (NoSuchFieldException | IllegalAccessException e) {
              e.printStackTrace();
          }

          return (BottomNavigationMenuView) menuView;
      }
    }

3. এই কাস্টমভিউতে লেআউট.এক্সএমএল যুক্ত করুন

আরও তথ্যের জন্য আমি Github এ এটি প্রয়োগ করেছি


সানফ0ার্ড তার উত্তরে যেমনটি দিয়েছিলেন আমি নিজে থেকে এটি বাস্তবায়নের পরামর্শ দেব। তবে AppCompatImageView আমার পক্ষে কাজ করছে না। আমি এটিকে ImageView পরিবর্তন করেছি। এবং getChildAt তে পরিবর্তিত হয়েছে।

এছাড়াও আমি বাছাই করা আইটেমগুলির সমস্ত লেবেলগুলি আড়াল করি।

private void centerMenuIcon() {
    BottomNavigationMenuView menuView = getBottomMenuView();
    if (menuView != null) {
        for (int i = 0; i < menuView.getChildCount(); i++) {
            BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);
            TextView smallText = (TextView) menuItemView.findViewById(R.id.smallLabel);
            smallText.setVisibility(View.INVISIBLE);
            //TextView largeText = (TextView) menuItemView.findViewById(R.id.largeLabel);
            ImageView icon = (ImageView) menuItemView.findViewById(R.id.icon);
            FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
            params.gravity = Gravity.CENTER;
            menuItemView.setShiftingMode(true);
        }
    }
}

1. android:title=""; সেট করুন android:title=""; মেনুতে / abc.xML এ

2. নীচের সহায়ক শ্রেণীর তৈরি করুন যা প্রতিবিম্ব ব্যবহার করছে

import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.widget.AppCompatImageView;
import android.util.Log;
import android.view.Gravity;
import android.widget.FrameLayout;

import java.lang.reflect.Field;

public class BottomNavigationViewHelper {
    public static void disableShiftMode(BottomNavigationView view) {
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
        try {
            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
            shiftingMode.setAccessible(true);
            shiftingMode.setBoolean(menuView, false);
            shiftingMode.setAccessible(false);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                //noinspection RestrictedApi
                item.setShiftingMode(false);
                item.setPadding(0, 15, 0, 0);
                // set once again checked value, so view will be updated
                //noinspection RestrictedApi
                item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            Log.e("BNVHelper", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BNVHelper", "Unable to change value of shift mode", e);
        }
    }
} 

৩. আপনার মূল ক্রিয়াকলাপে এই লাইনগুলি যুক্ত করুন:

mBottomNav = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(mBottomNav);




bottomnavigationview