3 টিরও বেশি আইটেমের সাথে নীচে নেভিগেশনভিউ: ট্যাব শিরোনামটি লুকিয়ে রয়েছে


85

আমি অ্যান্ড্রয়েড সাপোর্ট ডিজাইনের লাইব্রেরি ব্যবহার করে বটমন্যাভিগেশনভিউ ব্যবহার করছি 25. তবে আমি যখন ট্যাবগুলি স্যুইচ করি তখন অন্য ট্যাবের শিরোনামটি লুকিয়ে থাকে। তবে আসল নীচে নেভিগেশন ভিউয়ের কোনও আড়াল করার সমস্যা নেই। তবে আমার লুকিয়ে আছে।

মাইবোটমনাভিগেশন

তবে আমি এটি দেখতে চাই। এটা করার কোন ধারণা? আমি কী মিস করছি?

আসলবটমনাভিগেশন

আমার কোডটি এখানে:

কার্যকলাপ_মাইন.এক্সএমএল

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.yunus.ototakip.MainActivity">

<FrameLayout
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/bottom_navigation"
    android:layout_alignParentTop="true">
</FrameLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/beyaz"
    app:itemTextColor="@color/beyaz"
    app:menu="@menu/bottombar_menu" />

নীচে_বার_মেনু.এক্সএমএল

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
 <item
android:id="@+id/bb_menu_arac"
android:enabled="true"
android:icon="@drawable/icon_car"
android:title="@string/araclarim"
app:showAsAction="ifRoom" />
 <item
android:id="@+id/bb_menu_yakin"
android:enabled="true"
android:icon="@drawable/icon_yer"
android:title="@string/yakinimdakiler"
app:showAsAction="ifRoom" />
  <item
android:id="@+id/bb_menu_yaklasan"
android:enabled="true"
android:icon="@drawable/icon_takvim"
android:title="@string/yaklasanlar"
app:showAsAction="ifRoom" />

<item
    android:id="@+id/bb_menu_ipucu"
    android:enabled="true"
    android:icon="@drawable/icon_ipucu"
    android:title="@string/ipuclari"
    app:showAsAction="ifRoom" />
 </menu>

আপনি কি এর app:showAsAction="alwaysপরিবর্তে চেষ্টা করেছেনifRoom
ইয়াসাইন বেলদি

আমি চেষ্টা করেছি, তবে এটি এখনও লুকিয়ে রয়েছে
ইউনুস হাজনেদার


4
@ ইউনূসহজনদার যদি আইটেমটি 3 এর বেশি হয় তবে পাঠ্যটি সর্বদা লুকিয়ে থাকবে ...
শশাঙ্ক ভার্মা

4
ওহে, @ ড্যানএক্সপ্রাডো সমাধানটি ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি আপনার উত্তরকে স্বীকৃত হিসাবে চিহ্নিত করেছি। শুভ কোডিং।
ইউনূস হাজনেদার

উত্তর:


143

প্রতিবিম্বটি ব্যবহার করে সমাধানটি আর কাজ করে না কারণ ক্ষেত্রের এমফিটিংমোড সরানো হয়েছিল।

এখনই এটি করার একটি সহজ উপায় রয়েছে: সমর্থন লাইব্রেরি 28 বা ততোধিক উচ্চতর ব্যবহার করুন এবং কেবলমাত্র app:labelVisibilityMode="labeled"আপনার BottomNavigationViewএক্সএমএল ঘোষণায় যুক্ত করুন।

আশা করি এটা সাহায্য করবে.


চ্যাম্পের মতো কাজ করছেন, তবে কীভাবে এটি বৃত্তাকারে স্ক্রোলযোগ্য করা যায়?
শৈলেন্দ্র মাদদা

@ শৈলেন্দ্রমদ্দা আমি আপনাকে একটি নতুন প্রশ্ন হিসাবে পোস্ট করার পরামর্শ দিচ্ছি কারণ এটি এই প্রশ্নের সাথে সম্পর্কিত নয়।
ডানিলো প্রাদো

4
এটি কীভাবে ডিফল্ট আচরণ নয় ... আমি অ্যাপটির সাথে কয়েক ঘন্টা নষ্ট করেছি: শোঅ্যাকশন, অ্যান্ড্রয়েড: দৃশ্যমান, অ্যান্ড্রয়েড: সক্ষম এবং অন্যান্য হ্যাকের একগুচ্ছ। ধন্যবাদ!
ডানিশ খান

94

হালনাগাদ

অপসারণশীটমোড () এর আর দরকার নেই, সমর্থন লাইব্রেরি হিসাবে 28.0.0-alpha1 আমরা এখন লেবেল যুক্ত করতে পারি ।

এক্সএমএলে:

<android.support.design.widget.BottomNavigationView
    app:labelVisibilityMode="labeled" />

প্রোগ্রামগতভাবে পরিবর্তনের জন্য:

mBottomNavigationView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED); 

এটি কাজ করার জন্য: ডিজাইন সমর্থন লাইব্রেরিটি 28.0.0-alpha1 এ আপডেট করুন

এখানে একটি ভাল পড়া

পুরানো সহায়তা লাইব্রেরির জন্য:

আপনার bottom_bar_menu.xml.Change showAsActionঅ্যাট্রিবিউট

<item android:id="@id/menu_item"
android:title="text"
android:icon="@drawable/drawable_resource_name"
android:showAsAction="always|withText" />

বিল্ড.gradle ইন:

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

3 আইটেমের চেয়ে নীচে নেভিগেশন পর্যালোচনা: ব্যবহার removeShiftMode()পদ্ধতি

মধ্যে BottomNavigationViewHelper.javaব্যবহার করুন:

import android.annotation.SuppressLint;
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import java.lang.reflect.Field;

    public class BottomNavigationViewHelper {
        @SuppressLint("RestrictedApi")
        public static void removeShiftMode(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("BottomNav", "Unable to get shift mode field", e);
            } catch (IllegalAccessException e) {
                Log.e("BottomNav", "Unable to change value of shift mode", e);
            }
        }
    }

এটি ব্যবহার করে কল করুন:

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

এটি শিরোনাম পাঠ্যের শিফট অ্যানিমেশনটি অক্ষম করবে এবং পাঠ্য প্রদর্শিত হবে।


4
না, এটি এখনও লুকিয়ে আছে। আমি "সর্বদা" এবং "সর্বদা | পাঠ্য সহ" চেষ্টা করেছি
ইউনূস

4
আপনার আইটেমের একটি শিরোনাম বড় হওয়ায় অন্যের দৃষ্টিভঙ্গিটি ব্লক হয়ে যাচ্ছে? ছোট শিরোনাম এবং অঙ্কনযোগ্য চিত্র দিয়ে চেষ্টা করুন ..
rafsanahmad007

4
আপনি যে টিউটোট্রিয়াল অনুসরণ করছেন তার এই লাইনটি দেখুনIt’s important to note that the maximum number of items we can display is 5. This may change at any point, so it’s important to check this by using the getMaxItem() method provided by the BottomNavigationView class rather than hard-coding the value yourself.
rafsanahmad007

4
দুর্দান্ত উত্তর, ধন্যবাদ
হামজা আবদুল্লাহ

4
প্রতিবিম্ব সমাধানটি বেশ ভাল কাজ করে com.android.support:design:25.4.0তবে ব্যর্থ হয় com.android.support:design:26.1.0, তাই আমি লক্ষ্য এসডিকে এবং নির্ভরতার সংস্করণটি কিছুটা পিছনে ফিরিয়ে দেব।
এভি গান

10

নীচে নেভিগেশনভিউয়ের স্ক্যান উত্স কোডের পরে আমি খুঁজে পাই

mShiftingMode = mMenu.size() > 3;

মধ্যে BottomNavigationMenuView.java লাইন 265 তার মানে যখন মেনু আকারের তুলনায় আরো 3, ট্যাবের শিরোনাম HID হতে wiil। সুতরাং আপনি যদি ট্যাব শিরোনাম দেখাতে চান তবে আপনার কেবল বিল্ড থেকে নীচে কোডটি নেওয়া দরকার।

mShiftingMode = mMenu.size() > 5;

দ্রষ্টব্য: BottonNavigationView সর্বোচ্চ ট্যাব গণনা আবশ্যক 3 এবং 5. মধ্যে আপনি কোড পেতে পারেন BottomNavigationViewNew এখানে চিত্র বর্ণনা লিখুন


আমার নিজস্ব কাস্টমবটমভিউ রয়েছে যা নীচে নেভিগেশনভিউকে প্রসারিত করে, তার পরিবর্তে সেই সম্পত্তি সেট করার কোনও উপায় আছে কি?
জেপিএম

4
আমি "নীচে নেভিগেশন মেনুভিউ" এর লাইনটি দেখতে পাচ্ছি না যা প্রায় 3 টি ট্যাব সীমাতে রয়েছে। কোড কি বদলেছে?
অ্যান্ড্রয়েড বিকাশকারী

8

বটমন্যাভিগেশনভিউ হেল্পার ক্লাস তৈরি করুন

import android.annotation.SuppressLint;
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 {
    @SuppressLint("RestrictedApi")
    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);
if(menuView.getChildCount()<6)
           {
            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);
        }
    }
}   

ফোন করুন

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

4
এটিতে সপ্রেসলিন্ট রয়েছে যা সীমাবদ্ধ এপিআই উদ্বেগ সমস্যার সমাধান করে
j

3

কোটলিন এক্সটেনশন ফাংশন:

@SuppressLint("RestrictedApi")
fun BottomNavigationView.removeShiftMode(){
    val menuView = this.getChildAt(0) as BottomNavigationMenuView
    try {
        val shiftingMode = menuView.javaClass.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) {
        e.printStackTrace()
        Timber.tag("BottomNav").e( e, "Unable to get shift mode field")
    } catch (e: IllegalAccessException) {
        Timber.tag("BottomNav").e( e, "Unable to change value of shift mode")
    }
}

ধন্যবাদ জনাব. অতি উতসাহিত.
ইউনূস হাজনেদার

4
item.setShiftingMode(false)এখনitem.setShifting(false)
সিম

2

আমি রাফসানাহমাদ 7০০ উত্তরটি বেশ ব্যবহার করেছি তবে কোটলিনে অনুবাদ করেছি। আসুন আমি এটি ভবিষ্যতের ঘোরাঘুরির জন্য ভাগ করে নিন

@SuppressLint("RestrictedApi")
fun BottomNavigationView.disableShiftMode() {
    val menuView = this.getChildAt(0) as BottomNavigationMenuView
    try {
        val shiftingMode = menuView::class.java.getDeclaredField("mShiftingMode")
        shiftingMode.setAccessible(true)
        shiftingMode.setBoolean(menuView, false)
        shiftingMode.setAccessible(false)
        for (i in 0..(menuView.childCount - 1)) {
            val item = menuView.getChildAt(i) as BottomNavigationItemView
            item.setShiftingMode(false)
            // set once again checked value, so view will be updated
            item.setChecked(item.getItemData().isChecked())
        }
    } catch (e: NoSuchFieldException) {
        Timber.e("Unable to get shift mode field")
    } catch (e: IllegalAccessException) {
        Timber.e("Unable to change value of shift mode")
    }
}

4
এই সমাধানটি আর বৈধ নয়, গৃহীত সমাধানটি @DanXPrado
jpardogo

আমাকে জানানোর জন্য Thx
কর্মমা নির্মাতা

1

এই ক্ষেত্রে প্রযোজ্য না হলেও একটি বিষয় লক্ষণীয়।

আপনি নেভিগেট করতে যখন 3 থেকে 5 শীর্ষ-স্তরের গন্তব্য রাখেন তখন এই প্যাটার্নটি ব্যবহার করা যেতে পারে।

নিম্নলিখিতটি প্রদর্শন করতে আইকন শিরোনাম সক্ষম করতে:

  1. আপনার মেনু (নীচে_পরিচালনা_মেনু) আইটেম এক্সএমএলটি নীচে কাঠামোগত রয়েছে তা নিশ্চিত করুন: -

    <item
        android:id="@+id/action_home"
        android:enabled="true"
        android:icon="@drawable/ic_action_home"
        android:title="HOME"
        app:showAsAction="ifRoom"/>
    
    <item
        android:id="@+id/action_favourites"
        android:enabled="true"
        android:icon="@drawable/ic_action_favourite"
        android:title="FAVOURITES"
        app:showAsAction="ifRoom"/>
    
    <item
        android:id="@+id/action_basket"
        android:enabled="true"
        android:icon="@drawable/ic_action_basket"
        android:title="BASKET"
        app:showAsAction="ifRoom"/>
    

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

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@android:color/white"
    app:itemIconTint="@android:color/black"
    app:itemTextColor="@android:color/black"
    app:menu="@menu/bottom_navigation_menu"
    app:labelVisibilityMode="labeled"/>


0

এটি এপিআই 26 এ আমার জন্য কাজ করে:

 navigation = (BottomNavigationView) view.findViewById(R.id.bottom_navigation);


     try{disableShiftMode(navigation);}catch(Exception ew){}

আপনি যেখানে কল করতে চান সেখানে এই কার্যকলাপটিকে আপনার কার্যকলাপ বা খণ্ডে তৈরি করুন:

 @SuppressLint("RestrictedApi")
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);
            item.setShiftingMode(false);

            item.setChecked(item.getItemData().isChecked());
        }
    } catch (NoSuchFieldException e) {

    } catch (IllegalAccessException e) {

    }
}

0

আপনি নীচে নেভিগেশনভিউতে 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 এটি আমাকে অনেক সহায়তা করে H এটিও আপনাকে সহায়তা করে ope ধন্যবাদ ....


0

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

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@drawable/bottom_navigation_color_selector"
    app:itemTextColor="@drawable/bottom_navigation_color_selector"
    app:labelVisibilityMode="labeled"
    app:menu="@menu/menu_bottom_navigation" />

বিঃদ্রঃ

  implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.