Interfejs API ActionBar
nie ma możliwości pobrania bieżącego tła Drawable
lub koloru.
Jednakże, można użyć Resources.getIdentifier
zadzwonić View.findViewById
, odzyskać ActionBarView
, a następnie zadzwonić View.getBackground
pobrać Drawable
. Mimo to nadal nie da ci koloru. Jedynym sposobem, aby to zrobić, jest zamiana Drawable
na Bitmap
, a następnie użyj jakiegoś rodzaju color analyzer, aby znaleźć dominujący kolor.
Oto przykład odzyskania ActionBar
Drawable
.
final int actionBarId = getResources().getIdentifier("action_bar", "id", "android");
final View actionBar = findViewById(actionBarId);
final Drawable actionBarBackground = actionBar.getBackground();
Ale wydaje się, że najłatwiejszym rozwiązaniem byłoby stworzenie własnego atrybutu i zastosowanie go w swoich motywach.
Oto przykład, że:
atrybut niestandardowy
<attr name="drawerLayoutBackground" format="reference|color" />
Inicjalizować atrybut
<style name="Your.Theme.Dark" parent="@android:style/Theme.Holo">
<item name="drawerLayoutBackground">@color/your_color_dark</item>
</style>
<style name="Your.Theme.Light" parent="@android:style/Theme.Holo.Light">
<item name="drawerLayoutBackground">@color/your_color_light</item>
</style>
Następnie w układzie, który zawiera DrawerLayout
zastosować atrybut android:background
w ten sposób:
android:background="?attr/drawerLayoutBackground"
Można go uzyskać za pomocą TypedArray
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TypedArray a = obtainStyledAttributes(new int[] {
R.attr.drawerLayoutBackground
});
try {
final int drawerLayoutBackground = a.getColor(0, 0);
} finally {
a.recycle();
}
}
actionBar.getBackground() zwraca mi wartość null. czy robię coś źle? – kalehv
@kalehv masz zestaw tła za pomocą getActivity(). GetActionBar(). SetBackgroundDrawable (...)? Jeśli ustawiona jest wartość non, otrzymasz wartość pustą. – hcpl