Android 4.3 메뉴 항목 showAsAction =“항상”무시
Android 4.3 (API 레벨 18)부터 사용 가능한 새로운 v7 appcompat 라이브러리를 사용하고 있습니다.
메뉴 항목에 대해 showAsAction에 지정된 내용에 상관없이 표시되지 않습니다. 항상 오버플로 메뉴 아이콘을 만들고 메뉴 아래에 단일 메뉴 항목도 넣습니다.
다음과 같은 활동에 메뉴를 추가하려고합니다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_sizes, menu);
return true;
}
그리고 여기 내 메뉴 XML이 있습니다 :
<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의 버그입니까, 아니면 코드에 문제가 있습니까? 이전에 ActionBarSherlock과 비슷한 코드를 여러 번 사용했습니다.
아마도 필요한 네임 스페이스가 누락되었을 것입니다.
<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
문제가 지속되는지 확인하십시오.
Android 참조 문서 : 조치 단추 추가 . 관련 텍스트는 다음과 같습니다.
앱이 Android 2.1 이하의 버전에서 호환성을 위해 지원 라이브러리를 사용하는 경우 android : 네임 스페이스에서 showAsAction 속성을 사용할 수 없습니다. 대신이 속성은 지원 라이브러리에서 제공하며 고유 한 XML 네임 스페이스를 정의하고 해당 네임 스페이스를 속성 접두어로 사용해야합니다. (사용자 정의 XML 네임 스페이스는 앱 이름을 기반으로해야하지만 원하는 이름 일 수 있으며 선언 한 파일의 범위 내에서만 액세스 할 수 있습니다.)
나 자신을 알아 냈습니다. 지원 라이브러리 v7에서 showAsAction은 다음과 같은 사용자 정의 네임 스페이스 아래에 있어야합니다.
<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>
또한 ActionBarActivity.onCreateOptionsMenu () 메소드에서 올바른 팽창기를 사용해야합니다.
올바른 해결책 :
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_example, menu);
잘못된 해결책 :
MenuInflater menuInflater = new MenuInflater(this);
menuInflater.inflate(R.menu.menu_example, menu);
대한 조각
사용자 정의 네임 스페이스가있는 메뉴는 showAsAction이 표시 되지 않도록 합니다.
Android Studio 에서 사용자 정의 네임 스페이스 를 사용해야한다고 표시하더라도 showAsAction에 "android :"접두어를 사용하면 작동 합니다.
<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>
이는 차이가있는 경우를 대비하여 Android SDK 22 및 Support v4 단편을 사용합니다.
같은 문제가 있지만 Android 5에서는 3 개의 항목이 있지만 OS는 내 속성 "항상"을 무시하고 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);
}
}
또한 네임 스페이스의 경로가 올바른지 확인하십시오. 잘못된 경우 오류 메시지가 표시되지 않습니다.
나는했다
<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 부분을 잊어 버린 방법을 모르겠지만 일어났습니다. 오류 메시지가없고 추적하기 어려운 버그만 있습니다.
In my case, I had to remove from my app's build.gradle compile 'com.android.support:appcompat-v7:21.0.3'.
Notice: My min sdk = 14, and created project by android studio inserted my unnesessary dependancy.
After this replace you can write android:showAsAction="always"
This might not be your case but I was using
new MenuInflater(this).inflate(R.menu.my_menu, menu);
changing it to
getMenuInflater().inflate(R.menu.my_menu, menu);
fixed the problem!
<?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>
don't work, with supportLibraryVersion = '25.1.0' compileSdkVersion = 25
see the "Warning"
Should use app:showAsAction with the appcompat library with xmlns:app="http://schemas.android.com/apk/res-auto" less... (Ctrl+F1)
When using the appcompat library,menu resources should refer to the showAsAction in the app: namespace, not the android: namespace.
Similarly,when not using the appcompat library, you should be using the android:showAsAction attribute.
I think the warn can be ignore.
add custom namespace like this to showAsAction and actionViewClass:
<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" />
I have solved it by replacing
android:showAsAction="ifRoom"
with
app:showAsAction="ifRoom"
That is menuitme xml look like,
<item android:id="@+id/action_refresh"
android:title="Refresh"
android:icon="@drawable/refresh2"
app:showAsAction="ifRoom" />
The simplest way is Modify your code by adding
xmlns:app="http://schemas.android.com/apk/res-auto"
and change this code
android:showAsAction="always"
to
app:showAsAction="always"
and finally
<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>
참고URL : https://stackoverflow.com/questions/17914017/android-4-3-menu-item-showasaction-always-ignored
'IT박스' 카테고리의 다른 글
SQL DATE에서 월과 연도 만 가져 오기 (0) | 2020.07.24 |
---|---|
objective-c에서 NSURL의 일부 가져 오기 (0) | 2020.07.24 |
handlerbars.js 목록이 비어 있는지 확인 (0) | 2020.07.24 |
(이미지)보기 알파에 대한 Android 및 설정 알파 (0) | 2020.07.24 |
이유 : 적합한 이미지가 없습니다. (0) | 2020.07.24 |