Froyo と互換性のあるユニバーサル アプリを作成しているので、すばらしいActionBarSherlockを使用しています。行にアイコンとテキストを含む ActionBar のアクション アイテムからサブメニュー プルダウンを作成したいと考えています。同様の質問をするスレッドがいくつかありますが、それらを実装しようとしてもどこにも行きませんでした。私は Spinners を試しましたが、API 8 との互換性が必要なので、Sherlock lib で IcsSpinner を試しましたが、Jake は、lib が変更された場合に備えて、それに依存しないように他の人にアドバイスしました。ShareActionProvider を模倣するカスタム ActionProvider を試しましたが、複雑すぎることがわかりました。
この画像は私が望むものを正確に示していますが、アプリで動作させることができませんでした. 私のコードは次のとおりです。
public class AddDocActionProvider extends ActionProvider {
private Context mContext;
public AddDocActionProvider(Context context) {
super(context);
mContext = context;
}
@Override
public View onCreateActionView() {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View view = layoutInflater.inflate(
R.layout.actionbar_new_doc_action_provider, null);
return view;
}
@Override
public boolean hasSubMenu() {
return true;
}
@Override
public void onPrepareSubMenu(SubMenu subMenu) {
// loop was here calling
subMenu.add(0, id, 0, "Type 1")
.setIcon(R.drawable.type_1)
.setOnMenuItemClickListener(mOnMenuItemClickListener);
// added type 2, 3, etc
}
@Override
public boolean onPerformDefaultAction() {
// This is called if the host menu item placed in the overflow menu of the
// action bar is clicked and the host activity did not handle the click.
return true;
}
私のSherlockFragmentActivityには次のコードがありました:
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
MenuItem newDoc = menu.add(0, MENU_ADD_DOC, 0, "New Document");
newDoc.setVisible(!isPhoneShowingStorageList);
newDoc.setIcon(R.drawable.dark_content_new);
newDoc.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
mNewDocActionProvider = new AddDocActionProvider(getSupportActionBar().getThemedContext());
newDoc.setActionProvider(mNewDocActionProvider);
}
サブメニューが表示されず、アクションバーが無効になるとフロヨ電話でもクラッシュします。
私が見た他のスレッド:
Honeycomb ActionBar でカスタム プルダウンを作成するには?
アクション アイテムからのカスタム ドロップダウン (actionbarsherlock)
これは必ずしも ActionBarSherlock 固有の問題ではありませんが、率直に言って、これほど簡単なことを標準のアクション バーに実装するのがそれほど複雑であるとは信じられません。どんな助けでも大歓迎です。
UPDATE:コードではなくXMLを使用すると、アイコンが追加されました:
<item
android:id="@+id/menu_new_doc"
android:icon="@drawable/dark_content_new"
android:showAsAction="always"
android:title="New Document">
<menu>
<item
android:id="@+id/word2010"
android:icon="@drawable/doc"
android:title="Word 2010"/>
<item
android:id="@+id/excel2010"
android:icon="@drawable/excel"
android:title="Excel 2010"/>
</menu>
</item>
したがって、サブメニューを動的に表示するには、次のようにする必要がありました。
MenuItem newDoc = menu.findItem(R.id.menu_new_doc);
SubMenu subMenu = newDoc.getSubMenu();
subMenu.clear();
for (/* loop */) {
MenuItem subMenuItem = subMenu.add(0, hash, 0, fileType.GetDescription());
subMenuItem.setIcon(R.drawable.doc);
}