Odpowiedz

6

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 ActionBarDrawable.

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

} 
+4

actionBar.getBackground() zwraca mi wartość null. czy robię coś źle? – kalehv

+0

@kalehv masz zestaw tła za pomocą getActivity(). GetActionBar(). SetBackgroundDrawable (...)? Jeśli ustawiona jest wartość non, otrzymasz wartość pustą. – hcpl

Powiązane problemy