নীচে নেভিগেশনভিউ নিষ্ক্রিয় মেনুর শিরোনাম দেখায় না।
নীচে নেভিগেশনবারে সমস্ত মেনু উপাদানের শিরোনাম কীভাবে প্রদর্শিত হবে? সমস্যাটি হ'ল আমার ক্ষেত্রে কেবল ক্লিক করা উপাদানগুলির শিরোনাম দেখানো হয়েছে।
নীচে নেভিগেশনভিউ নিষ্ক্রিয় মেনুর শিরোনাম দেখায় না।
নীচে নেভিগেশনবারে সমস্ত মেনু উপাদানের শিরোনাম কীভাবে প্রদর্শিত হবে? সমস্যাটি হ'ল আমার ক্ষেত্রে কেবল ক্লিক করা উপাদানগুলির শিরোনাম দেখানো হয়েছে।
উত্তর:
শর্তটির বাস্তবায়ন BottomNavigationView
: যখন 3 টির বেশি আইটেম থাকে তখন শিফট মোডটি ব্যবহার করুন।
এই মুহুর্তে আপনি এটি বিদ্যমান এপিআইয়ের মাধ্যমে এটিকে পরিবর্তন করতে পারবেন না এবং শিফট মোড অক্ষম করার একমাত্র উপায় হ'ল প্রতিচ্ছবি ব্যবহার করা।
আপনার সহায়ক শ্রেণীর প্রয়োজন হবে:
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.util.Log;
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);
// 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);
}
}
}
এবং তারপরে disableShiftMode
আপনার পদ্ধতিটি প্রয়োগ করুন BottomNavigationView
তবে মনে রাখবেন যে আপনি যদি আপনার কোড থেকে মেনু ভিউ স্ফীত করছেন তবে আপনাকে এটি ফুলে যাওয়ার পরে চালিত করতে হবে।
ব্যবহারের উদাহরণ:
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
পুনশ্চ.
মনে রাখবেন, প্রতিবার আপনি নিজের মেনু আইটেম পরিবর্তন করার সময় আপনাকে এই পদ্ধতিটি কার্যকর করতে হবে BottomNavigationView
।
হালনাগাদ
আপনাকে প্রগুয়ার্ড কনফিগারেশন ফাইলও আপডেট করতে হবে (উদাঃ প্রগুয়ার্ড-rules.pro), উপরের কোডটি প্রতিবিম্ব ব্যবহার করে এবং যদি mShiftingMode
ক্ষেত্রটি অগ্রাহ্য করে তবে কাজ করবে না ।
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView {
boolean mShiftingMode;
}
প্রতি নির্দেশ করার জন্য ধন্যবাদ মুহাম্মদ Alfaifi এই সমস্যা এবং স্নিপেট প্রদানের ।
আপডেট 2
জোলান্ডা ভারহোফ নতুন সমর্থন লাইব্রেরি ( 28.0.0-alpha1
) এবং নতুন উপাদান উপাদান লাইব্রেরি ( 1.0.0-beta01
) এর দিকে ইঙ্গিত করার সাথে সাথে একটি সরকারী সম্পত্তি সরবরাহ করে যা 3 টি মেনু আইটেমের উপর স্থানান্তর মোডে ব্যবহার করতে পারে।
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:labelVisibilityMode="labeled"
...
/>
উপাদান উপাদান লাইব্রেরিতে 5 টি মেনু আইটেম থাকলে এটি প্রয়োগ হয়।
আপডেট 3
@ থমাসসান্ডারল্যান্ড যেমন উল্লেখ করেছে, আপনি স্থান পরিবর্তন অ্যানিমেশন অক্ষম করতে পোস্টফিক্স app:itemHorizontalTranslation="false"
ছাড়াই এই সম্পত্তিটিকে মিথ্যাতে সেট করতে পারেন Enabled
।
আপনি নীচে নেভিগেশন স্টাইলিং সম্পূর্ণ গাইড পরীক্ষা করতে পারেন এখানে
সমর্থন লাইব্রেরি 28.0.0-alpha1:
<android.support.design.widget.BottomNavigationView
app:labelVisibilityMode="labeled" />
app:
নাandroid:
পাঠ্য অ্যানিমেশনটি অক্ষম করতে আপনি এটি আপনার dimens.xML ফাইলে ব্যবহার করতে পারেন:
<dimen name="design_bottom_navigation_active_text_size">12sp</dimen>
আপনার নিজের ম্যানিফেস্টে আপনাকে এটি যুক্ত করতেও পারে:
tools:override="true"
tools:override="true"
<dimen name="design_bottom_navigation_active_text_size" tools:ignore="PrivateResource">12sp</dimen>
আপনি এখন ব্যবহার করতে পারেন app:labelVisibilityMode="[labeled, unlabeled, selected, auto]"
মধ্যে28-alpha
labeled
সমস্ত লেবেল দৃশ্যমান রাখবে।unlabeled
শুধুমাত্র আইকন প্রদর্শন করবে।selected
কেবলমাত্র নির্বাচিত আইটেম এবং শিফ্ট আইটেমগুলির জন্য লেবেল প্রদর্শন করবে।auto
আপনার কাছে থাকা আইটেমের সংখ্যার ভিত্তিতে লেবেলযুক্ত বা নির্বাচিত নির্বাচন করবেন। 1-3 আইটেমের জন্য লেবেলযুক্ত এবং 3+ আইটেমের জন্য নির্বাচিত।এক্সটেনশন ফাংশন হিসাবে কোটলিনে প্রজেমিসার উত্তর
@SuppressLint("RestrictedApi")
fun BottomNavigationView.disableShiftMode() {
val menuView = getChildAt(0) as BottomNavigationMenuView
try {
val shiftingMode = menuView::class.java.getDeclaredField("mShiftingMode")
shiftingMode.isAccessible = true
shiftingMode.setBoolean(menuView, false)
shiftingMode.isAccessible = false
for (i in 0 until menuView.childCount) {
val item = menuView.getChildAt(i) as BottomNavigationItemView
item.setShiftingMode(false)
// set once again checked value, so view will be updated
item.setChecked(item.itemData.isChecked)
}
} catch (e: NoSuchFieldException) {
Log.e(TAG, "Unable to get shift mode field", e)
} catch (e: IllegalStateException) {
Log.e(TAG, "Unable to change value of shift mode", e)
}
}
ব্যবহার (কোটলিন অ্যান্ড্রয়েড এক্সটেনশন সহ):
bottom_navigation_view.disableShiftMode()
আমার জন্য কাজ কর
bottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
অথবা
<android.support.design.widget.BottomNavigationView
app:labelVisibilityMode="labeled" />
পাঠ্য অ্যানিমেশনটি অক্ষম করতে এবং ফন্টের আকার হ্রাস করতে আপনার dimens.xML ফাইলে এটি ব্যবহার করুন:
<dimen name="design_bottom_navigation_text_size">10sp</dimen>
<dimen name="design_bottom_navigation_active_text_size">10sp</dimen>
Navigate
-> File...
> design_bottom_navigation_item.xml
যে অন্য কোন উপায় আছে দেখতে।
হালনাগাদ
অ্যানড্রয়েডের এসডিকে সংস্করণ ২৮ এবং তারপরে তারা পরিবর্তিত item.setShiftingMode(false)
হয়েছেitem.setShifting(false)
তারা মাঠটি সরিয়ে দিয়েছে mShiftingMode
সুতরাং ব্যবহার হবে
BottomNavigationHelper.removeShiftMode(bottomNav);
bottomNav.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
private static final class BottomNavigationHelper {
@SuppressLint("RestrictedApi")
static void removeShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShifting(false);
item.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
}
}
}
অন্যরা যেমন উল্লেখ করেছে, যেহেতু সমর্থন লাইব্রেরি 28.0.0-alpha1 এটি সম্ভব:
<android.support.design.widget.BottomNavigationView
app:labelVisibilityMode="labeled" />
অথবা আপনি এটিকে প্রোগ্রামক্রমে সেট করতে পারেন ।
দ্রষ্টব্য: আপনি যদি সমর্থন লাইব্রেরির কোনও পুরানো সংস্করণ থেকে আপগ্রেড করছেন তবে এসডিকে সংস্করণ সংকলন করতে ভুলবেন না। সমর্থন লাইব্রেরির সংস্করণগুলি এখানে পরীক্ষা করুন: লাইব্রেরি সংস্করণ সমর্থন করুন Support
তবে, আপনার অ্যাপ্লিকেশন ডিজাইন সমর্থন লাইব্রেরির পুরানো সংস্করণগুলির উপর নির্ভর করে যদি সংকলনের সময় আপনি লেবেলযোগ্যতা মোড মেসেজটি খুঁজে পান না । যদি এটি হয় তবে প্রদত্ত নির্ভরতার কোনও সংস্করণে আপগ্রেড করার চেষ্টা করুন, এটি ডিজাইন সমর্থন লাইব্রেরির কমপক্ষে 28.0.0-alpha1 এর সংস্করণের উপর নির্ভর করে। যদি এটি সম্ভব না হয় তবে নির্ভরতা স্পষ্টভাবে সংজ্ঞা দিন।
আপনি যদি গ্র্যাডল ব্যবহার করেন
আপনার বিল্ডড্র্যাডলে স্পষ্টভাবে ডিজাইন সমর্থন নির্ভরতা যুক্ত করতে :
বাস্তবায়ন 'com.android.support: ডিজাইন 28.0.0'
ডিফল্ট ব্যবহার করে আপডেট উত্তরের জন্য। সর্বশেষতম ডিজাইন লাইব্রেরিতে আপডেট করুন
বাস্তবায়ন "com.android.support:design:28.0.0"
এবং আপনার নীচে নেভিগেশনভিউ এক্সএমএল বৈশিষ্ট্যগুলিতে রাখুন
app:itemHorizontalTranslationEnabled="false"
আপনি প্রোগ্রাম হিসাবে এটি রাখতে পারেন
bottomNavigationView.setItemHorizontalTranslationEnabled(false);
আপনি এখানে উত্সটি পেতে পারেন নীচে নেভিগেশনভিউ
আশা করি এটি আপনাকে সহায়তা করবে।
app:labelVisibilityMode
?
আপনার BottomNavigationView
যোগ করতেapp:labelVisibilityMode="unlabeled"
<android.support.design.widget.BottomNavigationView
app:menu="@menu/bn_menu"
android:layout_height="56dp"
android:layout_width="match_parent"
app:labelVisibilityMode="unlabeled">
</android.support.design.widget.BottomNavigationView>
নিম্নলিখিত ফলাফল যা ফলাফল
এটি খুব সহজ, কেবল নীচে নেভিশনভিউতে একটি সম্পত্তি যুক্ত করুন
app:labelVisibilityMode="unlabeled"
বটমনাভিগেশনভিউয়ের সাথে আমার কিছু অদ্ভুত আচরণ ছিল। আমি যখন এটিতে কোনও আইটেম / টুকরা নির্বাচন করছিলাম তখন খণ্ডটি নীচে নেভিগেশনভিউটিকে কিছুটা নীচে ঠেলে দেয়, সুতরাং নীচে নেভিগেশনভিউয়ের পাঠ্যটি পর্দার নীচে চলে যায়, সুতরাং কেবল আইকনগুলি দৃশ্যমান ছিল এবং যে কোনও আইটেমের ক্লিক করে পাঠ্য আড়াল হয়ে যায়।
যদি আপনি সেই অদ্ভুত আচরণের মুখোমুখি হন তবে সমাধানটি এখানে। সরিয়ে ফেলুন
android:fitsSystemWindows="true"
আপনার খণ্ডের মূল বিন্যাসে। শুধু এটি সরান এবং বুম! নীচে নেভিগেশনভিউ সূক্ষ্মভাবে কাজ করবে, এখন এটি পাঠ্য এবং আইকন সহ প্রদর্শিত হতে পারে। আমি এটি আমার মূল সমন্বয়কারী খণ্ডের লেআউটে পেয়েছি।
যোগ করতে ভুলবেন না
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
শিফটিং মোড অক্ষম করতে আপনার ক্রিয়াকলাপে। যদিও এটি জিজ্ঞাসা করা প্রশ্নের সাথে একেবারে সম্পর্কিত নয় তবে এখনও আমি এটি সহায়ক বলে মনে করি।
এটি আমি ব্যবহার করা একটি তৃতীয় পক্ষের লাইব্রেরি এবং এতে অনেকগুলি কাস্টমাইজেশন বিকল্প রয়েছে যেমন শিফট মোড অক্ষম করা, কেবলমাত্র আইকন প্রদর্শন করা, আইকনগুলির আকার নির্ধারণ করা ইত্যাদি। নীচে নেভিগেশনভিউএক্স
আপনি যদি সেই বিরক্তিকর সামান্য শীর্ষ মার্জিন অ্যানিমেশন থেকে মুক্তি পেতে চান তবে আপনার আরও প্রতিবিম্ব কোড দরকার। এখানে সম্পূর্ণ সমাধান যা কোনও অ্যানিমেশন সরিয়ে দেয়:
@SuppressLint("RestrictedApi")
private 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);
item.setShiftingMode(false);
Field shiftAmount = item.getClass().getDeclaredField("mShiftAmount");
shiftAmount.setAccessible(true);
shiftAmount.setInt(item, 0);
shiftAmount.setAccessible(false);
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Timber.e(e, "Unable to get fields");
} catch (IllegalAccessException e) {
Timber.e(e, "Unable to change values");
}
}
এবং এটি আপনার অগ্রগামী কনফিগারেশন ফাইলটিতে যুক্ত করার বিষয়টি নিশ্চিত করুন:
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView {
boolean mShiftingMode;
}
-keepclassmembers class android.support.design.internal.BottomNavigationItemView {
int mShiftAmount;
}
আপনার সমর্থন লাইব্রেরি 28.0.0 এ আপডেট করুন।
bottomNav.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
কেবল এই পদ্ধতির উপরে এটি যুক্ত করতে চাই শিফটমোডকে কোডের নীচেও যুক্ত করুন। @SuppressLint ( "RestrictedApi")
https://android.jlelse.eu/disable-shift-label-animation-from-bottom-navigation-android-b42a25dcbffc
1
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:itemHorizontalTranslationEnabled="false"/>
2
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:labelVisibilityMode="labeled"/>
3
<resources xmlns:tools="http://schemas.android.com/tools">
<dimen name="design_bottom_navigation_active_text_size"
tools:override="true">12sp</dimen>
আপনি নীচে নেভিগেশনভিউতে 3 থেকে 5 আইটেমের জন্য পাঠ্য এবং আইকন উভয়ই দেখানোর জন্য এটি ব্যবহার করতে পারেন এবং স্থানান্তর বন্ধ করতে পারেন।
app:labelVisibilityMode="labeled"
তবে আপনি 5 টি আইটেমের জন্য বটম নেভিগেশনভিউতে দীর্ঘ পাঠ্য কাটা সমস্যার মুখোমুখি হবেন। তার জন্য, আমি নীচে পাঠ্য স্থানান্তর বন্ধের পাশাপাশি বটম নেভিগেশনভিউয়ের আইকনগুলির একটি ভাল সমাধান পেয়েছি। আপনি নীচে নেভিগেশনভিউতেও পাঠ্যের পাশাপাশি আইকনগুলির স্থানান্তরও বন্ধ করতে পারেন। কোড স্নিপশট এখানে দেওয়া হয়।
1. প্রদর্শিত হিসাবে নীচে নেভিগেশনভিউতে কোডের এই কয়েকটি লাইন যুক্ত করুন
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="@dimen/seventy_dp"
android:layout_semitransparent="true"
android:background="@color/colorBottomNev"
android:showAsAction="always|withText"
app:itemIconTint="@drawable/bottom_navigation_colors"
app:itemTextColor="@drawable/bottom_navigation_colors"
app:itemTextAppearanceActive="@style/BottomNavigationViewTextStyle"
app:itemTextAppearanceInactive="@style/BottomNavigationViewTextStyle"
app:menu="@menu/bottom_navigation_menu"
app:labelVisibilityMode="labeled"/>
2. মেনু আইটেম নীচের মত যুক্ত করুন: -
<?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_catalogue"
android:icon="@drawable/catalogue"
android:title="@string/catalogue"
android:enabled="true"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_contracts"
android:icon="@drawable/contract"
android:title="@string/contracts"
android:enabled="true"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_prospects"
android:icon="@drawable/prospect"
android:title="@string/prospects"
android:enabled="true"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_performance"
android:icon="@drawable/performance"
android:title="@string/performance"
android:enabled="true"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_advance"
android:icon="@drawable/advance"
android:title="@string/advance"
android:enabled="true"
app:showAsAction="ifRoom" />
</menu>
স্টাইল.এক্সএমএল ফাইলটিতে এই স্টাইলটি যুক্ত করুন:
<style name="BottomNavigationViewTextStyle">
<item name="android:fontFamily">@font/montmedium</item>
<item name="android:textSize">10sp</item>
<item name="android:duplicateParentState">true</item>
<item name="android:ellipsize">end</item>
<item name="android:maxLines">1</item>
</style>
4) ডায়মেন ফোল্ডারে এগুলি যুক্ত করুন
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<dimen name="design_bottom_navigation_text_size" tools:override="true">10sp</dimen>
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">10sp</dimen>
</resources>
আমি এই লিঙ্ক এবং লিঙ্কটি থেকে সহায়তা পেয়েছি । আপনি এই লিঙ্কগুলি অধ্যয়ন করে সাহায্য পেতে পারেন his এটি আমাকে অনেক সাহায্য করে ope এটিও আপনাকে সহায়তা করে ope ধন্যবাদ ....