Ответ 1
Исправлено. Было родительское действие, изменяющее тему в методе onCreate...
Я не знал, что вы можете задать тему программно в рамках действия с помощью:
setTheme(R.style.MyTheme);
Я не могу понять, как изменить элементы панели действий "onPressed" на Android. Я не говорю о цвете фона панели действий, а о синем над состоянием. Как я могу изменить цвет этого или, по крайней мере, избавиться от него? Например, значок приложения с идентификатором homeAsUpIndicator.
Я попытался изменить стиль панели действий, а также стиль элемента меню, но ничего не получилось.
Спасибо
ИЗМЕНИТЬ Вот моя реализация:
Мой стиль xml:
<style name="Theme.AppTheme" parent="@android:style/Theme.Holo">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:selectableItemBackground">@android:color/transparent</item>
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
<item name="android:actionBarItemBackground">@android:color/transparent</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@drawable/actionbarheader</item>
<item name="android:backgroundStacked">@drawable/actionbarheader</item>
<item name="android:backgroundSplit">@drawable/actionbarheader</item>
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
<item name="android:actionBarItemBackground">@android:color/transparent</item>
<item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
<item name="android:homeAsUpIndicator">@drawable/actionbarlogo</item>
<item name="android:icon">@drawable/app_icon</item>>
</style>
<style name="ActionBarTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textSize">20sp</item>
</style>
<style name="MyActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
<item name="android:background">@android:color/transparent</item>
</style>
Тогда у меня есть drawable для actionbarogo:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionbarlogo_on" android:state_pressed="true"/>
<item android:drawable="@drawable/actionbarlogo_on" android:state_focused="true"/>
<item android:drawable="@drawable/actionbarlogo_off"/>
</selector>
Мое меню xml для элементов панели действий:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/ContactsMode"
android:icon="@drawable/actionbarcontacts"
android:title="@string/contacts"
android:orderInCategory="100"
android:showAsAction="always"
android:background="@android:color/transparent" />
</menu>
и, наконец, элемент доступен:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/actionbarcontacts_on" android:state_pressed="true"/>
<item android:drawable="@drawable/actionbarcontacts_on" android:state_focused="true"/>
<item android:drawable="@drawable/actionbarcontacts_off"/>
</selector>
Вот как я создаю элементы меню для ActionBar:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
actionBar.setIcon(R.drawable.actionbarlogo);
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item= menu.findItem(R.id.ContactsMode);
if(ContactsButton)
item.setVisible(true);
else
item.setVisible(false);
return true;
}
Исправлено. Было родительское действие, изменяющее тему в методе onCreate...
Я не знал, что вы можете задать тему программно в рамках действия с помощью:
setTheme(R.style.MyTheme);
Чтобы установить фон значка приложения вместе с homeAsUpIndicator (общий фон для этих двух значков), вы должны установить элемент android:actionBarItemBackground
в теме. Тема должна содержать что-то вроде этого (я предполагаю, что вы используете ActionBarSherlock):
<style name="MyTheme" parent="@style/Theme.Sherlock">
<!-- for ActionBarSherlock -->
<item name="actionBarItemBackground">@drawable/my_background</item>
<!-- for native ActionBar -->
<item name="android:actionBarItemBackground">@drawable/my_background</item>
</style>
Если вытачиваемый drawable/my_background.xml
будет StaleListDrawable, содержащий что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/my_background_pressed" />
<item
android:drawable="@drawable/my_background_normal" />
</selector>
Чтобы полностью отключить фон, вы можете установить прозрачный фон, или значение @null
в теме также может работать.
Элемент темы android:actionBarItemBackground
устанавливает фон для значка приложения и homeAsUpIndicator. Но он также устанавливает фон по умолчанию для пунктов меню, значок переполнения и фон для заголовка. Эти фоны могут быть переопределены.
Элементы меню
Чтобы изменить фон элемента меню, установите подходящую (android:)actionButtonStyle
в теме следующим образом:
<style name="MyTheme" parent="@style/Theme.Sherlock">
<item name="actionButtonStyle">@style/MyActionButtonStyle</item>
<item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
</style>
И MyActionButtonStyle
будет содержать что-то вроде этого:
<style name="MyActionButtonStyle" parent="@style/Widget.Sherlock.ActionButton">
<item name="android:background">@drawable/my_background</item>
</style>
Значок переполнения
И, наконец, чтобы изменить фоновый значок переполнения, установите подходящую android:actionOverflowButtonStyle
в теме следующим образом:
<style name="MyTheme" parent="@style/Theme.Sherlock">
<item name="actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item>
<item name="android:actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item>
</style>
И MyOverflowButtonStyle
будет содержать примерно следующее:
<style name="MyOverflowButtonStyle" parent="@style/Widget.Sherlock.ActionButton.Overflow">
<item name="android:background">@drawable/my_background</item>
</style>