Ответ 1
Я решил это, выполнив следующее.
Создал это, чтобы сделать округлую угловую форму сплошным цветом. Это также добавляет полупрозрачный черный цвет, чтобы придать ему прижатый взгляд против черной земли. Рез/рисуем/shape_notification.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="#33000000" android:width="2dp"/>
<corners android:radius="4dp" />
<solid android:color="#99333333"/>
</shape>
Выделенный слой будет использоваться в качестве фактического значения для элемента действия. Он имеет фон (написанный выше), наложенный на значок гаечного ключа. Рез/рисуем/layer_customizer.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/shape_notification" />
<item android:drawable="@drawable/ic_menu_preferences" />
</layer-list>
Код Java для изменения цвета. Представление цели - это объект, которому назначается draw_customizer. Цвет, пройденный, изменит цвет тэга shape_notification.xml.
public static void setCustomizerDrawableColor(final View target, final int color) {
final Drawable d = target.getDrawable();
LayerDrawable layer = (LayerDrawable)d;
GradientDrawable gradient = (GradientDrawable)layer.getDrawable(0);
gradient.setColor(color);
gradient.invalidateSelf();
layer.invalidateSelf();
target.invalidate();
}
Создайте макет, используя эти слои. Рез/макет/actionview_customizer.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ActionViewCustomizer"
android:src="@drawable/layer_customizer"
android:contentDescription="@string/customize"
style="@style/ActionBarButton" />
Чтобы получить настраиваемый макет для добавления в ActionBar, добавьте в него этот пункт меню: Рез/меню/actionbar_main.xml
<item android:id="@+id/MenuItemCustomize"
android:icon="@drawable/layer_customizer"
android:title="@string/customize"
android:showAsAction="always"
android:actionLayout="@layout/actionview_customizer"
/>
Затем после загрузки Action Bar используйте этот код, чтобы получить дескриптор кнопки. Это происходит в вашей деятельности.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar_main, menu);
final ActionBar actionBar = getActionBar();
final MenuItem customizerItem = menu.findItem(R.id.MenuItemCustomize);
View v = customizerItem.getActionView();
customizerActionView = (ImageButton) v;
customizerActionView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
onOptionsItemSelected(customizerItem);
}
});
}
Если вы хотите, чтобы весь источник работал вместе, посмотрите на исходный код приложения. Я использую это. http://code.google.com/p/motivatormaker-android/source/browse/MakeMotivator/src/com/futonredemption/makemotivator/activities/MainActivity.java