Google ने बॉटम नॉर्विज़न व्यू के साथ नया सपोर्ट लाइब्रेरी v25 जारी किया
क्या आइटम लेबल हटाने का कोई तरीका है?
layout_marginBottom="-16dp"
इस पैडिंग को हटा देगा लेकिन सभी दृश्य को छोटा कर देगा।
android:paddingTop="8dp" android:layout_marginBottom="-8dp"
यह बार को छोटे होने से रोकता है
जवाबों:
दुर्भाग्य से बॉटम नॅनविजर्वेशन का यह पहला संस्करण बहुत सी सीमाओं के साथ आया है। और अब आप केवल समर्थन डिज़ाइन API का उपयोग करके शीर्षक नहीं निकाल सकते। इसलिए इस सीमा को हल करने के लिए जब Google इसे लागू नहीं करता है, तो आप कर सकते हैं (प्रतिबिंब का उपयोग करके):
1. नीचे से रिक्त शीर्षक सेट करें_विभाजन_मेनू। Xml फ़ाइल।
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. इस customView लेआउट में जोड़ें
अधिक जानकारी के लिए मैंने इसे जीथब पर लागू किया है
BottomNavigationItemView
कॉल करके प्रत्येक प्राप्त कर सकते हैं findViewById()
(जैसे @NikolaDespotoski अपने जवाब में कर रहा है )।
app:labelVisibilityMode="unlabeled"
1. मेनू / abc.xmlandroid:title="";
में सेट करें
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);
}
}
}
3. अपनी मुख्य गतिविधि में, इन पंक्तियों को जोड़ें:
mBottomNav = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(mBottomNav);
चिंतनहीन दृष्टिकोण:
private void removeTextLabel(@NonNull BottomNavigationView bottomNavigationView, @IdRes int menuItemId) {
View view = bottomNavigationView.findViewById(menuItemId);
if (view == null) return;
if (view instanceof MenuView.ItemView) {
ViewGroup viewGroup = (ViewGroup) view;
int padding = 0;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View v = viewGroup.getChildAt(i);
if (v instanceof ViewGroup) {
padding = v.getHeight();
viewGroup.removeViewAt(i);
}
}
viewGroup.setPadding(view.getPaddingLeft(), (viewGroup.getPaddingTop() + padding) / 2, view.getPaddingRight(), view.getPaddingBottom());
}
}
मैं शिफ्ट एनिमेशन और लेबल दोनों को हटाना चाहता था और यहाँ कोई भी समाधान मेरे लिए अच्छा काम नहीं करता था, इसलिए यहाँ मैंने जो कुछ भी सीखा, उसके आधार पर मैंने इसे बनाया:
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
और इसे मेनू आइटम के आईडी को पास करें।
मैं इसे अपने आप से लागू करने की सलाह दूंगा क्योंकि उसके जवाब में sanf0rd ने दिया था । लेकिन AppCompatImageView
मेरे लिए काम नहीं कर रहा है। मैंने इसे बदल दिया है ImageView
। और बदल getChildAt
गया findViewById
।
इसके अलावा, मैं अचयनित वस्तुओं के सभी लेबल छिपाता हूं।
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);
}
}
}
title
मेनू<item>
s से s को हटाने की कोशिश की ?