53

ActionBarMenuItemのビューをコードで微調整したいと思います。

残念ながら、getActionViewは常にnullを返すようです。

私のコード:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getSupportMenuInflater();
    inflater.inflate(R.menu.folder, menu);
    return super.onCreateOptionsMenu(menu);

}

public boolean onPrepareOptionsMenu(final Menu menu) {
    MenuItem menuFolder = menu.findItem(R.id.menu_folder);
    Log.i("", "* onPrepareOptionsMenu *" + menuFolder);
    Log.i("", "* getActionView *" + menuFolder.getActionView());

ログは次のとおりです。

01-11 22:13:42.884:I /(7893):* onPrepareOptionsMenu * com.actionbarsherlock.internal.view.menu.MenuItemWrapper@41401ac8

01-11 22:13:42.884:I /(7893):* getActionView * null

助けてくれてありがとう

編集:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item 
          android:id="@+id/menu_folder"
          android:icon="@drawable/ic_menu_archive"
          android:showAsAction="always"/>
</menu>
4

6 に答える 6

84

あなたが使用する必要があります

app:actionLayout="@layout/menu_actionbar_basket"

あなたが使用する場合、それはトリックです

android:actionLayout="@layout/menu_actionbar_basket"

デフォルトのツールバーでは常に null 例外が発生します。

于 2016-02-20T05:03:16.270 に答える
39

getActionView()からのカスタム actionView がある場合にのみ機能しsetActionViewます。

于 2013-01-11T21:19:50.190 に答える
33

私にとってうまくいった解決策は、アンドロイドの代わりにアプリの名前空間を使用することです。

app:actionViewClass="android.support.v7.widget.SearchView"

それを宣言することを忘れないでください: xmlns:app="http://schemas.android.com/apk/res-auto"

于 2015-05-02T21:44:42.517 に答える