Различные форматы для разных Textview, определенные в пользовательском стиле - PullRequest
1 голос
/ 06 января 2012

У меня проблема с выяснением, как это сделать: В настоящее время я пишу приложение с разными темами (пользователь может выбрать полный вид приложения из списка разных стилей). Затем выбран элемент списка. Я хочу позвонить setTheme(R.style.Own_App_Style0);, чтобы изменить внешний вид.

Проблема лучше всего объясняется на примере: Допустим, у нас есть 2 TextView.

Theme1 1. TextView: TextColor должен быть зеленым и TextSize 15sp. 2. TextView: TextColor должен быть красного цвета и TextSize 10sp.

Theme2 1. TextView: TextColor должен быть синим и TextSize 10sp. 2. TextView: TextColor должен быть желтым и TextSize 10sp.

Конечно, я знаю, что установив <item name="textViewStyle">@android:style/Widget.TextView</item>, я могу изменить внешний вид TextViews по умолчанию. Но как сделать так, чтобы, скажем, два (или более) разных типов TextView с разными применяемыми стилями (и с помощью xml)?

Ответы [ 2 ]

1 голос
/ 07 января 2012

Нашли решение (в основном в этом ответе setTextAppearance через код, ссылающийся на пользовательский атрибут ).Если у кого-то еще есть эта проблема, я кратко объясню:

Объявите в style.xml атрибут и в фактическом определении стиля присвойте значение (ссылку) этому атрибуту:

<declare-styleable name="CustomTextView">
    <attr name="mainTextView" format="reference"/>            
</declare-styleable>

<style name="appstyle0" parent="android:style/Theme.Holo.Light">
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance1</item>
    <item name="android:textViewStyle">@style/CustomTextViewAppearance2</item>
</style>

<style name="appstyle1" parent="android:style/Theme.Holo.Light">
    <item name="@attr/mainTextView">@style/CustomTextViewAppearance2</item>
    <item name="android:textViewStyle">@style/CustomTextViewAppearance1</item>
</style>
<style name="CustomTextViewAppearance1">
    <item name="android:textSize">10dip</item>
</style>
<style name="CustomTextViewAppearance2">
    <item name="android:textSize">30dip</item>
</style>

Сейчасв макете все textViews похожи на CustomTextViewAppearance2 (потому что это установлено как стандарт в этом стиле. И textViews, которые должны использовать другой стиль, записывают в определение:

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="blablabla"  
            style="?mainButtonTextView"/>

Когда вы сейчас вызываете .setTheme (послеперезапустите действие) появление переключателя textviews. Подобно этому методу, вы можете определить столько разных типов стилей View и переключаться между ними только путем вызова .setTheme.

0 голосов
/ 06 января 2012

К сожалению, стили являются статичными после определения. Чтобы программно изменить весь каскад стилей, вам придется изменить определение самого стиля. Вместо этого все, что вы можете сделать, это изменить стиль, назначенный TextView (или любому объекту, способному к стилю), как обрисовано в общих чертах в вопросе, на который я ссылался в моем комментарии выше.

...