Панель действий, не показывающая иконки действий
Я использую новую поддержку Action Bar, и все мои действия отображаются в режиме переполнения, а не как значки в панели. Мое приложение предназначено для 7+ API.
HomeActivity:
public class HomeActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(R.string.app_name);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
}
home.xml
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/action_browse"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/title_activity_browse"/>
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/text_search"/>
<item
android:id="@+id/action_scan"
android:icon="@drawable/action_scan"
android:showAsAction="always"
android:title="@string/title_activity_browse"/>
Я развертываю Nexus 7 с 4.3 и на LGP500 с 2.3.3 и без значков. Я также добавил android: theme = "@style/Theme.AppCompat.Light.DarkActionBar" в манифесте, и мой проект правильно ссылается на android-support-v7-appcompat, как описано в официальном документе.
Ответы
Ответ 1
вы должны определить свои файлы ресурсов menu
, а также атрибуты для библиотеки поддержки.
Чтобы внедрить обратную поддержку, она считывает их вместо тех, которые определены в старой версии Android.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
yourapp:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/action_browse"
android:orderInCategory="100"
android:showAsAction="never"
yourapp:showAsAction="never"
android:title="@string/title_activity_browse"/>
<item
android:id="@+id/action_search"
android:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="ifRoom|collapseActionView"
yourapp:showAsAction="ifRoom|collapseActionView"
yourapp:actionViewClass="android.support.v7.widget.SearchView"
android:title="@string/text_search"/>
<item
android:id="@+id/action_scan"
android:icon="@drawable/action_scan"
android:showAsAction="always"
yourapp:showAsAction="always"
android:title="@string/title_activity_browse"/>
</menu>
NB
помните, что для изменился класс SearchView. он теперь использовал один из библиотеки поддержки, поэтому вам также нужно обновить свой код в onCreateOptionsMenu()
EDIT:
здесь - довольно хорошее руководство по переносу из ActionBarSherlok в AppCompat
Ответ 2
Общей ошибкой является включение строки заголовка в файл string.xml. Убедитесь, что вы включили его для каждого пункта меню.
Предположим, что наше меню xml содержит следующий элемент:
<item
android:id="@+id/toggle_action"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/toggle_action"/>
Если мы забудем включить значение для строки toggle_action, тогда значок панели действий не будет отображаться.
Перейдите в файл strings.xml и добавьте следующее:
<string name="toggle_action">TOGGLE</string>