Ответ 1
getActionView()
работает только в том случае, если пользовательский actionView из setActionView
.
Я просто хотел бы настроить вид элемента ActionBar MenuItem по коду.
К сожалению, кажется, что 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 *[email protected]8
01-11 22: 13: 42.884: I/(7893): * getActionView * null
Большое спасибо за любую помощь
Edit:
<?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>
getActionView()
работает только в том случае, если пользовательский actionView из setActionView
.
Для меня решение, которое сработало, это использовать пространство имен app вместо android.
app:actionViewClass="android.support.v7.widget.SearchView"
Не забудьте объявить об этом:
xmlns:app="http://schemas.android.com/apk/res-auto"
вы должны использовать
app:actionLayout="@layout/menu_actionbar_basket"
вот трюк если вы используете
android:actionLayout="@layout/menu_actionbar_basket"
вы всегда получите пустое исключение в панели инструментов по умолчанию.
Если ваша сборка отладки работает без каких-либо проблем, а проблема связана только с сборкой релиза, это может быть связано с конфигурацией proguard. Если вы включили proguard в своем приложении, добавьте строку ниже в proguard-rules.pro
-keep class android.support.v7.widget.SearchView { *; }