Установить фон Drawable для панели действий не работает с цветом в colors.xml
У меня есть следующий код в моем фрагменте:
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.Black));
когда я нажимаю на кнопку в моем фрагменте, он вызывает этот код. Я устанавливаю панель действий на черный. Однако, если я изменю цвет на R.color.primaryColor
он продолжает устанавливать панель действий на средний серый цвет. Это так странно, хотя. Если я установлю его на R.color.primaryColorDark
это дает мне тот же серый цвет.
Я использую панель действий поддержки, которая на самом деле является панелью инструментов.
Я что-то упускаю здесь очевидное?
[РЕДАКТИРОВАТЬ]
Хорошо, я обнаружил, что я использовал цвета Android Color.BLUE
он работает нормально, он дает мне серый цвет, когда я использую R.colors.mycustomcolor
вот мой colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primaryColor">#2196F3</color>
<color name="primaryColorDark">#1976D2</color>
<color name="accentColor">#1976D6</color>
</resources>
и когда я устанавливаю панель действий на любой из этих цветов, они становятся серыми.
У меня есть только один color.xml, поэтому он не принимает неправильный цвет для другого типа макета.
2 ответа
Я нашел, что сделать это!
Вот код:
public override void OnAttach(Activity activity) {
base.OnAttach(activity);
var colorDrawable = new ColorDrawable(Color.White);
activity.ActionBar.SetBackgroundDrawable(colorDrawable);
var titleId = activity.Resources.GetIdentifier("action_bar_title", "id","android");
var abTitle = activity.FindViewById<TextView>(titleId);
abTitle.SetTextColor(Color.Black);
}
ИЛИ здесь еще один
не доступно Fragment
, ActionBar
представление обычно обрабатывается путем переопределения:
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
метод обратного вызова; убедившись, что вы позвонили SetHasOptionsMenu(true);
в OnCreate()
,
Вполне возможно, что вы получаете это NullReferenceException
так как OnCreateView()
вызывается до ActionBar
макет был раздут.
Как правило, так будет выглядеть метод:
public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater) {
//Stops the menu being reinflated on configuration changes
if(!menu.HasVisibleItems)
inflater.Inflate(Resource.Menu.MenuLayout, menu);
var myMenuItem = menu.FindItem(Resource.Id.MyMenuItem);
//Do stuff with your menu items
}
Попробуйте это и это должно работать
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.primaryColor)));