2012-06-15 3 views
13

У меня есть экран входа в систему, который по-разному используется для разных построений моего приложения. Мне нужно, чтобы фоновое изображение было другим в файле макета для этого экрана, поэтому я хочу указать на другой стиль для контейнера верхнего уровня. Я немного не понимаю, как это сделать.Как ссылаться на стиль в пользовательской теме

Я объявил styleable что-то вроде:

<resources> 

    <declare-styleable name="ThemeBase"> 
     <attr name="loginPageContainerStyle" format="reference" /> 
    </declare-styleable> 

</resources> 

У меня есть несколько различных тем для приложения, как например:

<resources> 

    <style name="ThemeBase" parent="android:style/Theme.Light" /> 

    <style name="ThemeOne" parent="ThemeBase"> 
     <item name="loginPageContainerStyle">@style/loginPageContainerThemeOne</item> 
    </style> 

    <style name="ThemeTwo" parent="ThemeBase"> 
     <item name="loginPageContainerStyle">@style/loginPageContainerThemeTwo</item> 
    </style> 

</resources> 

И я определил следующие стили:

<resources> 
    <style name="loginPageContainerThemeOne"> 
     <item name="android:background">@drawable/background_theme_one</item> 
    </style> 

    <style name="loginPageContainerThemeTwo"> 
     <item name="android:background">@drawable/background_theme_two</item> 
    </style> 
</resources> 

И, наконец, файл login.xml примерно так:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/loginRoot" 
    style= [ ? WHAT GOES HERE ? ] 
    android:gravity="center_horizontal" 
    android:orientation="horizontal"> 

    [ LAYOUT STUFF ... ] 

</LinearLayout> 

Я делаю что-то неправильно? Это можно сделать так?

ответ

14

Хорошо, я понял это, ссылка стиль должен быть:

style="?attr/loginPageContainerStyle" 

Фигурный я хотел бы поделиться.

+1

Отличный пример с темой и стилями для Android. Просто нужно упомянуть, что на AndroidManifest на теге приложения нужно добавить android: theme = "@ style/ThemeOne" или android: theme = "@ style/ThemeTwo", и это все, что нам нужно знать о темах – Ragaisis

+0

Большое спасибо. Именно то, что я искал. – dentex

Смежные вопросы