নীচে নেভিগেশনভিউ সর্বদা আইকন এবং পাঠ্য লেবেল উভয়ই প্রদর্শন করে


125

আমি ডিজাইন সমর্থন লাইব্রেরি সংস্করণ 25 থেকে android.support.design.widget.BottomNavicationView ব্যবহার করছি

compile 'com.android.support:design:25.0.0'

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottomBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="center"
        app:itemBackground="@color/colorPrimary"
        app:menu="@menu/bottom_navigation_main"
        android:forceHasOverlappingRendering="true"/>

@ মেনু / নীচে_নিভিগেশন_মিনে যখন কেবল তিনটি ক্রিয়া থাকে তখন এটি সর্বদা আইকন এবং পাঠ্য লেবেল উভয়ই প্রদর্শন করে।

তিনটির বেশি ক্রিয়া থাকাকালীন সময়ে আইকন এবং পাঠ্য লেবেল উভয়ই প্রদর্শন করার উপায় কী।


আপনার নীচের_নভিগেশন_মাইন.এক্সএমএল মেনুতে, আপনার অ্যান্ড্রয়েড থাকলে: showAsAction = "ifRoom" এটিকে অ্যান্ড্রয়েডে পরিবর্তন করুন: প্রতিটি আইটেমের জন্য showAsAction = "সর্বদা"।
শশাঙ্ক উদুপা

না, এটি কাজ করে না। আমি আগে এটি চেষ্টা করেছিলাম।
অ্যান্ড্রয়েড বিকাশকারী

আপনি কি আপনার মেনু এক্সএমএল ফাইলটি দেখাতে পারবেন
শশাঙ্ক উদুপা

'<? এক্সএমএল সংস্করণ = "1.0" এনকোডিং = "utf-8"?> <মেনু xmlns: অ্যান্ড্রয়েড = " স্কিমাস.অ্যান্ড্রয়েড. com/apk/res/android " xmlns: অ্যাপ = " স্কিমাস.অ্যান্ড্রয়েড.com/apk/ পুনরায় অটো "> <আইটেম অ্যান্ড্রয়েড: আইডি =" @ + আইডি / ক্রিয়া_প্রেমীটি "" অ্যাপ্লিকেশন: শোএসঅ্যাকশন = "সর্বদা" /> <আইটেম অ্যান্ড্রয়েড: আইডি = "@ + আইডি / অ্যাকশন_শাদিত" অ্যাপ্লিকেশন: শোএএসএশন = "সর্বদা" /> < আইটেম অ্যান্ড্রয়েড: আইডি = "@ + আইডি / অ্যাকশন_মুজিক" অ্যাপ্লিকেশন: শোএসএশন = "সর্বদা" /> <আইটেম অ্যান্ড্রয়েড: আইডি = "@ + আইডি / অ্যাকাউন্ট" অ্যান্ড্রয়েড: সক্ষম = "সত্য" অ্যাপ: শোআআআ্যাকশন = "সর্বদা" /> </menu> '
অ্যান্ড্রয়েড বিকাশকারী

4
অ্যাপ্লিকেশনটি রাখুন: নীচে নেভিগেশনভিউতে লেবেলভিজিবিলিটি মোড = "লেবেলযুক্ত"।
Shrawan

উত্তর:


326

যে কেউ এখনও সমাধান খুঁজছেন এবং তৃতীয় পক্ষের লাইব্রেরি বা রানটাইম প্রতিবিম্বের উপর নির্ভর করতে চান না, সমর্থন লাইব্রেরি 28 / জেটপ্যাক সর্বদা পাঠ্য লেবেলযুক্ত সমর্থন করে B

আপনি যে পদ্ধতিটি অনুসন্ধান করছেন এটি এটি।

বা এক্সএমএলে, app:labelVisibilityMode="labeled"


আমার কোন লাইব্রেরি সংস্করণ দরকার?
ড্যানিলোডিকিউইরোজ

সমর্থন লাইব্রেরি 28-alpha1 +
shaishgandhi

কেবল চাপ / দৃষ্টি নিবদ্ধ করা হলে আইকন-পাঠ্য প্রদর্শন করতে আপনি দৃশ্যমানতাটি "অটো" তে পরিবর্তন করতে পারেন। কোড: অ্যাপ: লেবেলভিজিবিলিটি মোড = "অটো"
কেনি

তুমি আসল পুরুষ! আপনাকে ধন্যবাদ মেটেরিয়াল লাইব্রেরির সর্বশেষ সংস্করণটির সাথে এটি কাজ করে।
Sud007

68

8 ই মে, 2018 থেকে আপডেট করুন

আপনি app:labelVisibilityMode="labeled" সরাসরি ব্যবহার করতে পারেন <android.support.design.widget.BottomNavigationView />

উৎস: https://developer.android.com/references/com/google/android/matory/bottomnavication/ LabelVisibilityMode

দীর্ঘ সমাধানের নীচে এটির দরকার নেই।

পূর্ববর্তী উত্তর

বটমনাভিগেশনভিউয়ের সাথে আমার কিছু অদ্ভুত আচরণ ছিল। আমি যখন এটিতে কোনও আইটেম / টুকরা নির্বাচন করছিলাম তখন খণ্ডটি নীচে নেভিগেশনভিউটিকে কিছুটা নীচে ঠেলে দেয়, সুতরাং নীচে নেভিগেশনভিউয়ের পাঠ্যটি পর্দার নীচে চলে যায়, সুতরাং কেবল আইকনগুলি দৃশ্যমান ছিল এবং যে কোনও আইটেমের ক্লিক করে পাঠ্য আড়াল হয়ে যায়।

যদি আপনি সেই অদ্ভুত আচরণের মুখোমুখি হন তবে সমাধানটি এখানে। সরিয়ে ফেলুন

android:fitsSystemWindows="true"

আপনার খণ্ডের মূল বিন্যাসে। শুধু এটি সরান এবং বুম! নীচে নেভিগেশনভিউ সূক্ষ্মভাবে কাজ করবে, এখন এটি পাঠ্য এবং আইকন সহ প্রদর্শিত হতে পারে। আমি এটি আমার মূল সমন্বয়কারী খণ্ডের লেআউটে পেয়েছি।

যোগ করতে ভুলবেন না

BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);

শিফটিং মোড অক্ষম করতে আপনার ক্রিয়াকলাপে।

এই শ্রেণিটি এখানে:

public class BottomNavigationViewHelper {

    @SuppressLint("RestrictedApi")
    public static void removeShiftMode(BottomNavigationView view) {
        //this will remove shift mode for bottom navigation 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);
                // set once again checked value, so view will be updated
                item.setChecked(item.getItemData().isChecked());
            }

        } catch (NoSuchFieldException e) {
            Log.e("ERROR NO SUCH FIELD", "Unable to get shift mode field");
        } catch (IllegalAccessException e) {
            Log.e("ERROR ILLEGAL ALG", "Unable to change value of shift mode");
        }
    }
}

এটি STAR_ZERO এর উত্তরের সাথে আমার সমস্যার সমাধান করেছে!
ক্রিস্টোফার স্মিথ

আপনার কাছে কলটিতে disableShiftModeএবং ক্লাসে removeShiftMode। এই সামান্য তাত্পর্য ছাড়াও আপনার উত্তরটি আমার জন্য সমস্যাটি সমাধান করেছে। আমার কাছে এখন স্থানান্তরিত না করে এবং পাঠ্য + আইকন সহ পাঁচটি মেনুআইটিম রয়েছে। আপনাকে ধন্যবাদ খুব অনেক!
ইয়ামাকুজুরে

পারফেক্ট। আপনার নীচে নেভিগেশনে 3 টিরও বেশি আইটেম থাকে তখন একটি স্থানান্তর মোড উপস্থিত হয়। এটি ব্যবহার করে আপনি সেই স্থানান্তর অক্ষম করতে পারেন এবং তাই পাঠ্য সহ সমস্ত আইকন একবারে উপস্থিত হবে।
কিশোর বিক্রম অলি

1
এটি অপরিবর্তিত এপিআই, এবং এটি সমর্থন লাইব্রেরি সংস্করণ ২৮ এ কাজ করে না + @ শৈশগন্ধি উত্তর গৃহীত হ'ল এটি করার আরও সঠিক উপায়।
ওকরাকোজ

19

সংস্করণ 25 এ এটি কঠিন।

এই কোড ব্যবহার করে দেখুন। তবে আমি মনে করি এটি ভাল সমাধান নয়।

BottomNavigationView navigationView = (BottomNavigationView) findViewById(R.id.bottomBar);
BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
    BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i);
    itemView.setShiftingMode(false);
    itemView.setChecked(false);
}

অ্যান্ড্রয়েড স্টুডিওতে এই জাতীয় কোড যুক্ত করা উচিত: // ননস্পেকশন সীমাবদ্ধ এপি আইটেম ভিউ.সেট চেকড (মিথ্যা); `` `
Jiezhi.G

4
এটি এখনও আইটেমগুলি
স্থানান্তরিত করছে

1
পারফেক্ট !! আইকন এবং পাঠ্য উভয়ই প্রদর্শন করে। তবে শিফটিং মোড (মিথ্যা) কাজ করছে না।
মিনকু

এটি কিশানসোলানকি 124 এর উত্তরের সাথে মিলিয়ে আমার সমস্যার সমাধান করেছে!
ক্রিস্টোফার স্মিট

11

এখানে একটি কোটলিন এক্সটেনশন ফাংশন যা @STAR_ZERO এবং @ কিশানসোলানকি 124 এর সমাধানকে একত্রিত করে।

fun BottomNavigationView.disableShiftMode() {
    val menuView = getChildAt(0) as BottomNavigationMenuView

    menuView.javaClass.getDeclaredField("mShiftingMode").apply {
        isAccessible = true
        setBoolean(menuView, false)
        isAccessible = false
    }

    @SuppressLint("RestrictedApi")
    for (i in 0 until menuView.childCount) {
        (menuView.getChildAt(i) as BottomNavigationItemView).apply {
            setShiftingMode(false)
            setChecked(false)
        }
    }
}

এটি ব্যবহার করতে:

myBottomNavigation.disableShiftMode()

10

আপনি এই প্রভাব করতে চান?

ছবিটি দেখতে এখানে ক্লিক করুন

যদি তা হয় তবে আমি আপনাকে নীচ নেভিগেশনভিউএক্স try চেষ্টা করার পরামর্শ দিয়েছি


1
আপনার গ্রন্থাগারটি ভাল এবং চিত্তাকর্ষক কাজ তবে আমি ডিজাইন লাইব্রেরি 25.0.0 ব্যবহার করে এই কার্যকারিতাটি অর্জন করতে চেয়েছিলাম দুর্ভাগ্যক্রমে এটি অ্যান্ড্রয়েড ডিজাইনের অনুশীলনের বিরুদ্ধে
অ্যান্ড্রয়েড বিকাশকারী

এই "ফিক্সড নীচে ন্যাভিগেশন বার" অনুযায়ী, মেটারিয়াল ডিজাইন চশমা বিরুদ্ধে নয় ডক্স । এছাড়াও, এই দুর্দান্ত লাইব্রেরিটি ভাগ করে নেওয়ার জন্য আমার ব্যক্তিগত ধন্যবাদ।
সের্গ ডি অ্যাডেলান্টাদো

1
এটি ম্যাটেরিয়াল ডিজাইনের চশমার বিরুদ্ধে against আপনি যে দস্তাবেজটি সরবরাহ করেছেন তা যদি আপনি পড়ে থাকেন তবে আপনি দেখতে পাবেন যে এটি স্পষ্টভাবে বলেছে "যদি সেখানে চার বা পাঁচটি ক্রিয়া থাকে তবে কেবলমাত্র আইকন হিসাবে নিষ্ক্রিয় দর্শন প্রদর্শন করুন"।
ফিলিপ

8

আপনি নীচে নেভিগেশনভিউতে পাঠ্য এবং আইকন উভয়ই দেখানোর জন্য এটি ব্যবহার করতে পারেন

app:labelVisibilityMode="labeled"

আপনি যদি এটি ব্যবহার করে থাকেন তবে আপনি আইকন এবং পাঠ্য উভয়ই দেখতে সক্ষম হবেন

<android.support.design.widget.BottomNavigationView
    app:labelVisibilityMode="labeled"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottom_navigation_view"
    android:layout_alignParentBottom="true"
    app:menu="@menu/bottom_navigation_menu"/>

6

আপনি অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন: লেবেলভিজিবিলিটি মোড = সরাসরি "লেবেলযুক্ত"

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        app:labelVisibilityMode="labeled"
        android:elevation="8dp"
        android:layout_alignParentBottom="true"
        app:itemBackground="@drawable/bottom_navi"
        app:itemTextColor="@color/white"
        app:itemIconTint="@color/white"
        app:menu="@menu/bottom_nav_menu_managment" />

5

বটমনাভিগেশনভিউ ক্লাসে একটি নীচে নেভিগেশনমেনুভিউ ক্ষেত্র এবং নীচে বারে নীচে থাকা নেভিগেশনমেনুভিউতে একটি নীচে বারের আইটেমগুলি রয়েছে en

বলুন এন আইটেমের সংখ্যা, নীচে নেভিগেশনমেনুভিউ নীচে নেভিগেশন আইটেমভিউ [] অ্যারের প্রতিটি সদস্যের উপর নীচে নেভিগেশন আইটেম ভিউ.সেট শিটিংমোড (n> 3) কল করবে। এই ফাংশনটি আচরণটি স্থির করে (সর্বদা বা কেবল নির্বাচনের উপরে শিরোনাম দেখায়)।

সুতরাং সর্বদা শিরোনামগুলি দেখানোর উপায় হ'ল এই পদ্ধতিটি কল করার চেষ্টা করা এবং আপনি ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেসের জন্য প্রতিবিম্বটি ব্যবহার করতে পারেন।

    BottomNavigationView bottomNavigationView= (BottomNavigationView) findViewById(R.id.bottom_navigation);


//  get the private BottomNavigationMenuView field 
        Field f = null;
        try {
            f = bottomNavigationView.getClass().getDeclaredField("mMenuView");
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        f.setAccessible(true);
        BottomNavigationMenuView menuView=null;
        try {
             menuView = (BottomNavigationMenuView) f.get(bottomNavigationView); 
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

//  get the private BottomNavigationItemView[]  field 
        try {
            f=menuView.getClass().getDeclaredField("mButtons");
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        f.setAccessible(true);
        BottomNavigationItemView[] mButtons=null;
        try {
            mButtons = (BottomNavigationItemView[]) f.get(menuView); 
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }


        for(int i=0;i<mButtons.length;i++){
            mButtons[i].setShiftingMode(false);
            mButtons[i].setChecked(true);
        }

এটি খুব ভাল, কেবল আমাদের নিশ্চিত করতে হবে যে নীচের নেভিগেশনমেনুভিউও স্থানান্তরিত হয় না। । f.setAccessible (সত্য); f.setBoolean (মেনুভিউ, মিথ্যা);
স্টেফেন কে।

4

শিরোনামটি পুরোভাবে দেখাতে। এই কোটলিন কোডটি ব্যবহার করে দেখুন:

@SuppressLint("RestrictedApi")
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_ofree)

    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)

    val menuView = navigation.getChildAt(0) as BottomNavigationMenuView
    for (i in 0 until menuView.childCount) {
        val itemView = menuView.getChildAt(i) as BottomNavigationItemView
        itemView.setShiftingMode(false)
        itemView.setChecked(false)
    }
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.