코드에서 ActionBar 액션에 하위 메뉴 항목을 추가하는 방법은 무엇입니까?
xml을 통해 내 작업에 하위 메뉴 항목을 추가 할 수 있습니다 ActionBar
.
main_menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_new_form"
android:icon="@drawable/ic_new_form"
android:title="@string/menu_new_form"
android:showAsAction="ifRoom|withText">
<menu>
<item android:id="@+id/form1"
android:icon="@drawable/attachment"
android:title="Form 1"
android:onClick="onSort" />
<item android:id="@+id/form2"
android:icon="@drawable/attachment"
android:title="Form 2"
android:onClick="onSort" />
</menu>
</item>
</menu>
그러나 Java 코드를 통해 이러한 하위 항목을 어떻게 추가 할 수 있습니까? 아래와 같이 작동하지 않습니다. 하위 항목이 잘못된 작업에 추가되고 있으며 드로어 블도 표시되지 않습니다. 내 '새 양식'버튼이 아닌 바로 오른쪽 버튼입니다.
main_menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_new_form"
android:icon="@drawable/ic_new_form"
android:title="@string/menu_new_form"
android:showAsAction="ifRoom|withText">
</item>
</menu>
자바 코드 :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
Log.d("MainMenu", ",menu title0: " + menu.getItem(0).getTitle());
// returns "New Form"
menu.addSubMenu(0, Menu.NONE, 1, "Form 1").setIcon(R.drawable.attachment);
menu.addSubMenu(0, Menu.NONE, 2, "Form 2").setIcon(R.drawable.attachment);
return true;
}
( http://developer.android.com/guide/topics/ui/menus.html#PopupMenu )를 사용 하지 않고 XML 대신 Java 코드를 통해 하위 메뉴 항목을 추가하는 방법이 있습니까?PopupMenu
업데이트 (솔루션) :
마지막 코드 스 니펫은 adamp의 응답에 따라 하위 메뉴를 동적으로 채우는 데 사용되었습니다.
// menu options
private static final int MENU_PREFERENCES = Menu.FIRST;
private static final int MENU_LOGOUT = 2;
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
menu.add(0, MENU_PREFERENCES, 0, getString(R.string.general_preferences)).setIcon(
android.R.drawable.ic_menu_preferences);
// load all available form templates
Cursor c = managedQuery(FormsProviderAPI.FormsColumns.CONTENT_URI, null, null, null, null);
try {
int ixDisplayName = c.getColumnIndex(FormsProviderAPI.FormsColumns.DISPLAY_NAME);
int ixId = c.getColumnIndex(FormsProviderAPI.FormsColumns._ID);
int cnt = 0;
while (c.moveToNext()) {
cnt++;
Log.d("ID: ", "ID: "+ c.getInt(ixId)); // misusing the group id for the form id
menu.getItem(1).getSubMenu().addSubMenu(c.getInt(ixId), Menu.NONE, cnt, c.getString(ixDisplayName)).setIcon(R.drawable.attachment_dark);
}
} catch (Exception e) {
Log.e(TAG, "Error init form templates list.", e);
}
return true;
}
네, 있습니다.
이 addSubMenu
메서드는 SubMenu
개체를 반환 합니다. A SubMenu
도 Menu
이므로 add
상위 메뉴가 아닌 하위 메뉴에 항목을 추가하도록 호출 할 수 있습니다 . 위의 코드는 단일 새 양식 하위 메뉴 내에 두 개의 항목이 아닌 양식 1과 양식 2에 대해 두 개의 다른 하위 메뉴를 만듭니다.
예:
SubMenu submenu = menu.addSubMenu(0, Menu.NONE, 1, "New Form").setIcon(R.drawable.ic_new_form);
submenu.add("Form 1").setIcon(R.drawable.attachment);
ActionProvider를 추가하는 것이 더 쉬울 수 있습니다. 여기에 설명 된대로 시도 할 수 있습니다.
ActionProvider 사용을 고려해야합니다.
예 : https://gist.github.com/sibelius/7ca0b757492ff6740dec
작업 공급자 항목이있는 메뉴
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item android:id="@+id/action_companies"
android:icon="@drawable/ic_list"
android:title="@string/action_companies"
app:actionProviderClass="com.example.MyActionProvider"
app:showAsAction="always"/>
</menu>
암호
public class MyActionProvider extends ActionProvider {
private Context mContext;
public MyActionProvider(Context context) {
super(context);
mContext = context;
}
@Override
public View onCreateActionView() {
//LayoutInflater layoutInflater = LayoutInflater.from(mContext);
return null;
}
@Override
public void onPrepareSubMenu(SubMenu subMenu) {
super.onPrepareSubMenu(subMenu);
subMenu.clear();
subMenu.add("menu 1");
subMenu.add("menu 2");
subMenu.add("menu 3");
}
@Override
public boolean hasSubMenu() {
return true;
}
@Override
public boolean onPerformDefaultAction() {
return super.onPerformDefaultAction();
}
}
참고 URL : https://stackoverflow.com/questions/9344160/how-to-add-submenu-items-to-actionbar-action-in-code
'UFO ET IT' 카테고리의 다른 글
IE8 / 9에서 jQuery 및 XDomainRequest가있는 CORS (0) | 2020.11.28 |
---|---|
MVC 사용자 지정 유효성 검사 : 두 날짜 비교 (0) | 2020.11.28 |
원격 Git 저장소에 대한 쓰기 액세스를 어떻게 확인할 수 있습니까 ( "푸시 할 수 있습니까?"). (0) | 2020.11.28 |
어떤 스택 오버플로 스타일 마크 다운 (WMD) JavaScript 편집기를 사용해야합니까? (0) | 2020.11.28 |
IE10에서 자리 표시 자에 초점 유지 (0) | 2020.11.28 |