risposta

6

L'API ActionBar non ha un modo per recuperare lo sfondo corrente Drawable o colore.

Tuttavia, è possibile utilizzare per chiamare Resources.getIdentifierView.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 ActionBarDrawable.

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(); 
    } 

} 
+4

() mi restituisce nulla. Sto facendo qualcosa di sbagliato? – kalehv

+0

@kalehv avete uno sfondo impostato usando getActivity(). GetActionBar(). SetBackgroundDrawable (...)? Se non è impostato, otterresti effettivamente un valore nullo. – hcpl

Problemi correlati