android - ডানদিকে কাউন্টার সহ নেভিগেশনভিউ মেনু আইটেমগুলি




navigation-drawer material-design (4)

নতুন ডিজাইন সমর্থন লাইব্রেরিতে নতুন নেভিগেশনভিউ সত্যিই দুর্দান্ত কাজ করে।

তারা বিকল্পগুলি প্রদর্শন করতে " মেনু-আইটেম " ব্যবহার করে।

তবে আমি কীভাবে মেনু আইটেমের ডানদিকে একটি কাউন্টার প্রদর্শন করতে পারি?

এই ছবিতে লাইক:

বা GMail অ্যাপ্লিকেশন পছন্দ।


অ্যাপকোম্প্যাট-ভি 7 NavigationView 23 তম সংস্করণ থেকে শুরু করে ক্রিয়াকলাপের দর্শনগুলিকে সমর্থন করে, তাই নিজেকে পাল্টে প্রয়োগ করা বেশ সহজ।

  1. কাউন্টার লেআউট তৈরি করুন, যেমন menu_counter.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
  2. এটি আপনার ড্রয়ার মেনুতে এক্সএমএল, অর্থাৎ menu/drawer.xml :

    <item
        ...
        app:actionLayout="@layout/menu_counter" />

মনে রাখবেন আপনার app নেমস্পেস ব্যবহার করা উচিত, android ব্যবহার করার চেষ্টা করবেন না।

বিকল্পভাবে আপনি MenuItem.setActionView() পদ্ধতিতে ম্যানুয়ালি অ্যাকশন ভিউ সেট করতে পারেন MenuItem.setActionView()

  1. মেনু আইটেমটি সন্ধান করুন এবং কাউন্টার সেট করুন:

    private void setMenuCounter(@IdRes int itemId, int count) {
        TextView view = (TextView) navigationView.getMenu().findItem(itemId).getActionView();
        view.setText(count > 0 ? String.valueOf(count) : null);
    }

দ্রষ্টব্য, আপনার যদি অ্যান্ড্রয়েড 2.x সংস্করণগুলি সমর্থন করতে হয় তবে আপনাকে MenuItemCompat ব্যবহার করতে হবে।


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

আমি জানি সবচেয়ে ভাল সমাধান নয় এবং এটি ডান-প্রান্তিকর নয় তবে এটি বেশ ভালভাবে একটি কাউন্টার হিসাবে কাজ করে। এটার মতো কিছু:

NavigationView navigation = (NavigationView)findViewById(R.id.navigation);
Menu menuNav = navigation.getMenu();
MenuItem element = menuNav.findItem(R.id.item5);
String before = element.getTitle().toString();

String counter = Integer.toString(5);
String s = before + "   "+counter+" ";
SpannableString sColored = new SpannableString( s );

sColored.setSpan(new BackgroundColorSpan( Color.GRAY ), s.length()-(counter.length()+2), s.length(), 0);
sColored.setSpan(new ForegroundColorSpan( Color.WHITE ), s.length()-(counter.length()+2), s.length(), 0);


element.setTitle(sColored);

কাউন্টারটি উন্নত করতে, আপনি কোণগুলি বৃত্তাকার সেট করার জন্য একটি ভাল উত্তর পেতে পারেন

উদাহরণ:


নেভিগেশনভিউর উত্সটির দিকে তাকিয়ে তারা বর্তমানে মেনু আইটেমগুলির কোনও কাস্টম রেন্ডারিং সমর্থন করে না ( NavigationMenuPresenter এবং NavigationMenuAdapter )। আশা করি তারা মেনু আইটেমগুলিতে একটি কাস্টম ফন্ট সেট করতে চাইলেই তারা আরও কার্যকারিতা প্রকাশ করে তবে প্রতিবিম্বটি ব্যবহার না করেই অক্ষম।


পদক্ষেপ 1 : গ্রুপ আইটেমটি শনাক্ত করুন এবং নীচে দেওয়া হিসাবে "অ্যাপ্লিকেশন: ক্রিয়াভিউক্লাশ = অ্যান্ড্রয়েড.উইজেট.টেক্সটভিউ" যুক্ত করুন:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<group android:checkableBehavior="single">

    <item
        android:id="@+id/nav_recorder"
        app:actionViewClass="android.widget.TextView"
        android:icon="@drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/nav_night_section"
        app:actionViewClass="android.widget.TextView"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="Slideshow" />
</group>

পদক্ষেপ 2: নেভিগেশন ড্রয়ার মেনু আইটেমটি ঘোষণা করুন এবং ব্যাজ মানটি দিয়ে আইটেমটি আরম্ভ করুন

//Create these objects above OnCreate()of your main activity
TextView recorder,nightSection;

//These lines should be added in the OnCreate() of your main activity
recorder =(TextView) MenuItemCompat.getActionView(navigationView.getMenu().
        findItem(R.id.nav_recorder));

recordSection=(TextView) MenuItemCompat.getActionView(navigationView.getMenu().
        findItem(R.id.nav_night_section));

//This method will initialize the count value
initializeCountDrawer();

পদক্ষেপ 3: ইনিশিয়ালকাউন্টড্রাউয়ার () কে যেখানেই প্রয়োজন হয় সেখানে ডাকা যেতে পারে। এটি নেভিগেশন ড্রয়ার মেনু আইটেমের গণনা বা ব্যাজ মান আপডেট করতে ব্যবহার করা যেতে পারে।

private void initializeCountDrawer(){

    //Gravity property aligns the text
    recorder.setGravity(Gravity.CENTER_VERTICAL);
    recorder.setTypeface(null, Typeface.BOLD);
    recorder.setTextColor(getResources().getColor(R.color.colorAccent));                
    recorder.setText("99+");

    slideshow.setGravity(Gravity.CENTER_VERTICAL);
    slideshow.setTypeface(null,Typeface.BOLD);
    slideshow.setTextColor(getResources().getColor(R.color.colorAccent));              
    //count is added     
   slideshow.setText("7");
}




navigationview