Тематические представления TextView не всегда работают - PullRequest
0 голосов
/ 22 августа 2011

У меня есть довольно специфическая проблема. Я использую внешний вид Android по умолчанию, чтобы стилизовать мои TextView s, и все, кроме одного шва, будут работать безупречно.

Я использую внешний вид ?android:attr/textAppearanceSmall, и он без проблем меняет цвет шрифта, когда я нахожусь в XML-дизайнере макета и меняю тему между Holo и Holo.Light (Android 3.0+).

Однако один конкретный TextView не будет стилизован, когда он работает на планшете, и он использует тот же XML-код, что и другие, которые работают.

Вот мой XML-код для TextView, который не работает:

<TextView android:id="@+id/textView1" 
    android:text="TextView"
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_width="match_parent"
    android:layout_marginTop="2sp"
    android:lines="2"
    android:gravity="top|center"
    android:textAppearance="?android:attr/textAppearanceSmall">
</TextView>

Я также пытался сделать это в коде, используя следующий метод, но это тоже не работает:

setTextAppearance(this, android.R.attr.textAppearanceSmall);

Есть идеи?

1 Ответ

2 голосов
/ 23 августа 2011

Во-первых, я хотел бы отметить, что при стилизации более чем одного View -компонента с одним и тем же стилем (с использованием XML) существует очень аккуратный способ создания стилей для этого .

Так что ваш стиль может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- The Style for all the TextViews -->
    <style name="TextViewStyle">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_alignParentBottom">true</item>
        <item name="android:layout_alignParentLeft">true</item>
        <item name="android:layout_width=">match_parent</item>
        <item name="android:layout_marginTop">2sp</item>
        <item name="android:lines">2</item>
        <item name="android:gravity">top|center</item>
        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
    </style>

</resources>

Пока ваш макет выглядит только так:

<TextView android:id="@+id/textView1" 
    android:text="TextView"
    style="@style/TextViewStyle"
/>

<TextView android:id="@+id/textView2" 
    android:text="Another TextView"
    style="@style/TextViewStyle"
/>

<!-- .... -->

Это делает код более понятным и помогает предотвратить опечатки.


И последнее, но не менее важное: что-то похожее на вашу проблему уже обсуждалось здесь . Это также может помочь в решении вашей проблемы.

...