L'API ActionBar
non ha un modo per recuperare lo sfondo corrente Drawable
o colore.
Tuttavia, è possibile utilizzare per chiamare Resources.getIdentifier
View.findViewById
, recuperare il ActionBarView
, quindi chiamare View.getBackground
per recuperare il Drawable
. Anche così, questo ancora non ti darà il colore. L'unico modo per farlo sarebbe convertire lo Drawable
in un Bitmap
, quindi utilizzare una sorta di color analyzer per trovare il colore dominante.
Ecco un esempio di recupero di ActionBar
Drawable
.
final int actionBarId = getResources().getIdentifier("action_bar", "id", "android");
final View actionBar = findViewById(actionBarId);
final Drawable actionBarBackground = actionBar.getBackground();
ma sembra che la soluzione più semplice sarebbe quella di creare il proprio attributo e applicarlo nei vostri temi.
Ecco un esempio di che:
attributo personalizzato
<attr name="drawerLayoutBackground" format="reference|color" />
inizializzare l'attributo
<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>
Poi nel layout che contiene il DrawerLayout
, applicare l'attributo android:background
così:
android:background="?attr/drawerLayoutBackground"
Oppure si può ottenere utilizzando un actionBar.getBackground 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();
}
}
() mi restituisce nulla. Sto facendo qualcosa di sbagliato? – kalehv
@kalehv avete uno sfondo impostato usando getActivity(). GetActionBar(). SetBackgroundDrawable (...)? Se non è impostato, otterresti effettivamente un valore nullo. – hcpl