Вопрос по android – Как работает стиль Android: attr?

9

Я пытаюсь создать пользовательский интерфейс Android с помощью макетов. Я начну со следующего:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="?android:attr/listSeparatorTextViewStyle"/>

И это выглядит хорошо (все заглавные буквы, мелкий шрифт, разделительная полоска под ним). Теперь я хочу расширить стиль, поэтому я изменил его следующим образом:

<TextView
    android:id="@+id/..."
    android:layout_marginTop="8dip"
    android:text="..."
    style="@style/section_title"/>

В стиле:

<style name="section_title" parent="@android:attr/listSeparatorTextViewStyle">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

И это не работает (шрифт правильный, но разделительная линия исчезла).

Как получилось ... это?

Ваш Ответ

1   ответ
22

style="?android:attr/listSeparatorTextViewStyle"

Вы используете стиль, указанный этим атрибутом (listSeparatorTextViewStyle). Если вы посмотрите на платформуthemes.xml вы увидите, что стиль, который фактически используется для этого атрибута,Widget.TextView.ListSeparator.White, Так что этоstyle Вы должны расширить в своем собственном стиле.

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

@GopalSinghSirvi Вы идете и просматриваете файлы themes.xml и styles.xml в SDK.
На самом деле стиль, на который указывает этот атрибут, зависит от темы.Widget.TextView.ListSeparator.White это то, чтоTheme.Holo.Light тема сопоставляет его с другими темами.
как найти то, на что указывает объект?
Это имеет смысл сейчас. Это кажется уродливым решением, хотя. Чтобы соответствовать стилю системы, я должен иметь (потенциально) разные стили для каждой версии Android, и если производитель изменил этот стиль во имя скинов, мне не повезло, и я просто не смогу соответствовать системному стилю для этого устройства. Hounshell
@Hounshell Вы можете использовать собственную тему и установить свой собственный стиль дляlistSeparatorTextViewStyle приписывать. При этом ваш собственный стиль будет присутствовать на каждой платформе Android. Конечно, это все равно сделает вас уязвимым для производителя телефона, который меняет некоторые стили (единственная реальная проблема - это атрибут drawable). Вы не говоритеhow точно ли ваш макет использует этот стиль, но имейте в виду, что пользователи, вероятно, проявляют некоторые отличия пользовательского интерфейса в приложении.

Похожие вопросы