অ্যান্ড্রয়েড 4.3 মেনু আইটেম শোAsAction = "সর্বদা" উপেক্ষা করা হয়েছে


116

আমি অ্যান্ড্রয়েড ৪.৩ (এপিআই লেভেল ১৮) থেকে উপলব্ধ নতুন ভি 7 অ্যাপকম্প্যাট লাইব্রেরি ব্যবহার করছি।

একটি মেনু আইটেমের জন্য showAsAction এ যা নির্দিষ্ট করা আছে তা নির্বিশেষে, এটি প্রদর্শিত হয় না - এটি সর্বদা ওভারফ্লো মেনু আইকনটি তৈরি করে এবং মেনুর নীচে এমনকি একটি একক মেনু আইটেম রাখে।

মেনু যুক্ত করার চেষ্টা করছে এর মতো ক্রিয়াকলাপে:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_sizes, menu);
    return true;
}

এবং এখানে আমার মেনু এক্সএমএল:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        android:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

এটি কি নতুন সমর্থন লাইব্রেরি v7 এর একটি বাগ, বা কোডের সাথে কিছু ভুল? আমি এর আগেও বহুবার অ্যাকশনবারারলকের সাথে একই জাতীয় কোডটি ব্যবহার করেছি।


2
তথ্যের উদ্দেশ্যে - "... "always"প্রস্তাবিত নয়; এটি ব্যবহার করা ভাল "ifRoom"এবং ওএসকে সিদ্ধান্ত নিতে দেওয়া ভাল " "
চিফ টুপেনসিলস

উত্তর:


313

সম্ভবত আপনি প্রয়োজনীয় নাম স্থানটি অনুপস্থিত:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        [yourapp]:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

[yourapp]আপনার অ্যাপের নাম বা যেকোন নাম স্থান দিয়ে আপনার হৃদয়ের ইচ্ছাগুলি প্রতিস্থাপন করুন ।

অন্যান্য জিনিস যাচাইয়ের জন্য:

  • আপনার ক্রিয়াকলাপ শ্রেণি প্রসারিত হয়েছে কিনা তা দেখুন ActionBarActivity

সমস্যাটি স্থির থাকে কিনা তা পরীক্ষা করে দেখুন।


অ্যান্ড্রয়েড রেফারেন্স ডকুমেন্টেশন: অ্যাকশন বোতাম যুক্ত করা । এখানে প্রাসঙ্গিক পাঠ্য:

যদি আপনার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড ২.১-এর মতো কম সংস্করণগুলিতে সামঞ্জস্যের জন্য সমর্থন লাইব্রেরি ব্যবহার করে থাকে তবে অ্যান্ড্রয়েড: নেমস্পেস থেকে শোএসএশন বৈশিষ্ট্যটি উপলভ্য নয়। পরিবর্তে এই বৈশিষ্ট্যটি সহায়তা লাইব্রেরি সরবরাহ করে এবং আপনাকে অবশ্যই নিজের এক্সএমএল নেমস্পেসটি সংজ্ঞায়িত করতে হবে এবং সেই নেমস্পেসটি অ্যাট্রিবিউটের উপসর্গ হিসাবে ব্যবহার করতে হবে। (একটি কাস্টম এক্সএমএল নেমস্পেস আপনার অ্যাপের নামের উপর ভিত্তি করে হওয়া উচিত, তবে এটি আপনি চান এমন কোনও নাম হতে পারে এবং আপনি যে ফাইলটিতে এটি ঘোষণা করেন তার সুযোগের মধ্যেই এটি অ্যাক্সেসযোগ্য))


2
এটাই আমি খুঁজে পেয়েছি। আপনাকে ধন্যবাদ - অবশ্যই স্বীকৃত তবে শোএএ্যাকশনের সেই কাস্টম নেমস্পেস ব্যবহার করা উচিত।
Mcingwe

5
'ইউর্যাপ' এর অর্থ স্ট্রিং.এক্সএমএল <স্ট্রিং নাম = "অ্যাপ_নাম"> ইউর্যাপ </ স্ট্রিং> ঠিক আছে?
LOG_TAG

4
এই কাজ কেন কেউ ব্যাখ্যা করতে পারেন? কেন একটি কাস্টম নেমস্পেস প্রসারিত করার প্রয়োজন আছে? সামান্য বিভ্রান্ত।
দিনথ

8
@ জিনেথ অ্যাপকম্প্যাটটি একটি লাইব্রেরি প্রকল্প হিসাবে ব্যবহৃত হয়। এর অর্থ এটির সমস্ত সংস্থান (স্ট্রিং, অঙ্কনযোগ্য, গুণাবলী ...) অ্যান্ড্রয়েড নেমস্পেসের পরিবর্তে আপনার অ্যাপ্লিকেশন নেমস্পেসে ঘোষণা করা হয়েছে। showAsActionঅ্যানড্রয়েড -7 এ বৈশিষ্ট্যটির অস্তিত্ব ছিল না বলে আপনাকে আপনার অ্যাপের নাম
স্থানটি

22
প্রত্যেকে "কাস্টম নেমস্পেস" বা "আপনার অ্যাপের সাথে মেলে এমন একটি নেমস্পেস" বলে। তবে নেমস্পেস সবসময় http://schemas.android.com/apk/res-autoপ্রতিটি উদাহরণে থাকে। এটি কোনও কাস্টম নয় বা আপনার অ্যাপ্লিকেশনটির সাথে মিলে যায়। ডকুমেন্টেশন থেকে এটি আসল নামস্থান। আমি মনে করি প্রত্যেকে একটি কাস্টম উপসর্গ বোঝায় এবং এটি আসলে আপনি যা চান তা হতে পারে। এটা কি সত্য?
অ্যান্ড্রু আর্নট

52

নিজেকে আবিষ্কার। সমর্থন লাইব্রেরি v7 এর সাথে শোএকশনটির মতো একটি কাস্টম নেমস্পেসের আওতায় যাওয়া উচিত:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:balloonberry="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        balloonberry:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

1
'বলুনবেরি' মানে স্ট্রিং.এক্সএমএল "<স্ট্রিং নাম =" অ্যাপ_নাম "> বেলুনবেরি </ স্ট্রিং>" ডান?
LOG_TAG

5
@ লৌগ_ত্যাগ - না, এটি উপরে বর্ণিতভাবে ঠিক হওয়া উচিত। এটি স্ট্রিং নয়, একটি নেমস্পেস।
BeccaP


মিসিংওয়ে
সচিদানন্দ নায়েক

32

এছাড়াও নিশ্চিত হয়ে নিন যে আপনি অ্যাকশনবারিটিভিটি.অনক্রিটঅপশনমেনু () পদ্ধতিতে সঠিক ইনফ্লেটার ব্যবহার করছেন।

সঠিক সমাধান:

MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_example, menu);

ভুল সমাধান:

MenuInflater menuInflater = new MenuInflater(this);
menuInflater.inflate(R.menu.menu_example, menu);

1
আমি উপরের সমস্ত উত্তর এবং স্ট্যাকওভারফ্লোতে অন্য উত্তরগুলি দিয়েছি, তবে কেবলমাত্র আমি যা অনুপস্থিত ছিল তা হ'ল আপনি উত্তর দিন - getMenuInflater ()। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ।
Amt87

এই এক জন্য আপনাকে অনেক ধন্যবাদ। আমি আমার সমস্ত 100+ মেনুগুলিকে একটি কাস্টম নেমস্পেস এবং 1 টি স্টিংকিন স্ক্রিন ব্যবহার করতে রূপান্তর করেছি যা এখনও কাজ করছে না ... দেখা যাচ্ছে যে 1 ক্রিয়াকলাপ getMenuInflater () এর পরিবর্তে "নতুন মেনুআইনফ্লেটার" ব্যবহার করছে। অসংখ্য ধন্যবাদ!
ডিস্কদেভ

এই অত্যন্ত গুরুত্বপূর্ণ. আমি মেনুআইফ্লেটার তৈরি (2 উপায়) ব্যবহার করছিলাম। ধন্যবাদ
wtk

24

জন্য টুকরা

কাস্টম নেমস্পেস সহ মেনুগুলি শো-অ্যাকশনটি প্রদর্শন করতে বাধা দেবে।

"অ্যান্ড্রয়েড:" শোঅ্যাসএ্যাকশনের উপসর্গটি ব্যবহার করা কার্যকর হবে, যদিও অ্যান্ড্রয়েড স্টুডিও মন্তব্য করবে আপনার একটি কাস্টম নামের স্থান ব্যবহার করা উচিত

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_add_checkin"
          android:title="Add Checkin"
          android:orderInCategory="10"
          android:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add"/>
</menu>

এটি যে কোনও পার্থক্য তৈরি করে সেই ক্ষেত্রে অ্যান্ড্রয়েড এসডিকে 22 এবং সমর্থন ভি 4 টুকরা ব্যবহার করছে।


এটিই কেবলমাত্র আমার সমস্যা সমাধান করেছে (যদিও এটি এই ত্রুটিটি দেখায়)। ধন্যবাদ!
ব্যবহারকারী 2630165

3
আপনি এক্সএমএল লেআউটে ত্রুটি / সতর্কতা টিপসগুলির সাহায্যে দমন করতে পারেন: <item> এর মধ্যে উপেক্ষা = "AppCompatResource"। দস্তাবেজগুলি এখানে: সরঞ্জাম.অ্যান্ড্রয়েড.com
বেকার

আপনার উত্তর এবং আন্তন কিজেমা আমার পক্ষে সঠিক সমাধান। এবং টিপ জন্য ধন্যবাদ tools:ignore
হাটা

16

একই সমস্যাটি পেয়েছি তবে অ্যান্ড্রয়েড 5 এ আমার কাছে 3 টি আইটেম রয়েছে তবে ওএস আমার বৈশিষ্ট্যটিকে "সর্বদা" উপেক্ষা করে কেবল 2 টি আইটেম দেখিয়েছে। এখানে আমার সমাধান:

  @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    Log.d(TAG, "onCreateOptionsMenu()");
    inflater.inflate(R.menu.your_menu, menu);
    for (int j = 0; j < menu.size(); j++) {
        MenuItem item = menu.getItem(j);
        Log.d(TAG, "set flag for " + item.getTitle());
        item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);
    }
}

1
setShowAsActionFlags()এপিআই 14 প্রয়োজন, তবে এটি আমার জন্য এখনও সেরা সমাধান ছিল।
মিঃ বাংলো

6

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

আমার ছিল

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

পরিবর্তে

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

আমি শুধু জানতাম এটি কাজ করে না। আমি কীভাবে পথের / apk অংশটি ভুলে যেতে পেরেছি তা নিশ্চিত নয়, তবে এটি ঘটেছে। কোনও ত্রুটি বার্তা নয়, ট্র্যাক ডাউন করার জন্য কেবল একটি অধরা বাগ।


6

আমার ক্ষেত্রে, আমার অ্যাপ্লিকেশনটির বিল্ড.gradle সংকলন 'com.android.support:appcompat-v7:21.0.3' থেকে আমাকে সরিয়ে ফেলতে হয়েছিল।

বিজ্ঞপ্তি : আমার মিনিট sdk = 14, এবং অ্যান্ড্রয়েড স্টুডিও দ্বারা নির্মিত প্রকল্পটি আমার অনিবার্য নির্ভরতা .োকাল।

এই প্রতিস্থাপনের পরে আপনি অ্যান্ড্রয়েড লিখতে পারেন: showAsAction = "সর্বদা"


ধন্যবাদ এটি আমার সমাধান! এই দিনগুলি সম্ভবত বেশিরভাগ ক্ষেত্রে সেরা সমাধান, কারণ এটি 4.0 এর আগে অ্যান্ড্রয়েড সংস্করণগুলিকে সমর্থন করা অপ্রয়োজনীয়।
পিনইন_সামু

আপনার উত্তর এবং বাকের আমার পক্ষে সঠিক সমাধান।
হাটা

4

এটি আপনার ক্ষেত্রে নাও হতে পারে তবে আমি ব্যবহার করছিলাম

new MenuInflater(this).inflate(R.menu.my_menu, menu);

এটি পরিবর্তন

getMenuInflater().inflate(R.menu.my_menu, menu);

সমস্যার সমাধান!


0
<?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/back"
        android:icon="@drawable/back"
        app:showAsAction="always"
        android:title="@string/back"/>
    <item
        android:id="@id/save"
        android:icon="@drawable/le_top_btn_icon_add"
        app:showAsAction="ifRoom"
        android:title="@string/save"/>
</menu>

সমর্থন লাইবারি ভার্শন = '25 .1.0 'সংকলনএসডিপি ভার্সন = 25 দিয়ে কাজ করবেন না

"সতর্কতা" দেখুন

অ্যাপ্লিকেশনটি ব্যবহার করা উচিত: এক্সএমএলএনএস সহ অ্যাপকম্প্যাট লাইব্রেরির সাথে শোঅ্যাকশন: অ্যাপ = "http://schemas.android.com/apk/res-auto" কম ... (Ctrl + F1)

অ্যাপকম্প্যাট লাইব্রেরিটি ব্যবহার করার সময়, মেনু সংস্থানগুলিতে অ্যাপ্লিকেশনটির শোঅ্যাকশন: নামস্থান, অ্যান্ড্রয়েড: নেমস্পেস নয় to

একইভাবে, অ্যাপকম্প্যাট লাইব্রেরি ব্যবহার না করার সময়, আপনার অ্যান্ড্রয়েড: শোএএসএশন বৈশিষ্ট্যটি ব্যবহার করা উচিত।

আমি মনে করি সতর্কতা উপেক্ষা করা যেতে পারে।


0

শোএসএশন এবং অ্যাকশনভিউক্লাসে এর মতো কাস্টম নেমস্পেস যুক্ত করুন:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
    android:title="@string/search"
    android:icon="@drawable/ic_search"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.widget.SearchView" />


0

আমি প্রতিস্থাপন করে এটি সমাধান করেছি

android:showAsAction="ifRoom"

সঙ্গে

app:showAsAction="ifRoom"

এটি মেনুইটম এক্সএমএল দেখতে দেখতে,

<item android:id="@+id/action_refresh"
      android:title="Refresh"
      android:icon="@drawable/refresh2"
      app:showAsAction="ifRoom" />

0

সহজতম উপায় হ'ল যুক্ত করে আপনার কোডটি সংশোধন করুন

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

এবং এই কোড পরিবর্তন করুন

android:showAsAction="always"

প্রতি

app:showAsAction="always"

এবং পরিশেষে

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        app:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.