#android #tabs #themes
#Android #вкладки #темы
Вопрос:
Мы разрабатываем приложение для Android, в котором есть несколько разных вкладок. Мы пытались применить тему ко всему приложению, и мы также пытались применить тему к определенным действиям. Ни то, ни другое не имеет никакого эффекта.
У меня есть этот файл стиля:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="recapmain">
<item name="android:buttonStyle">@style/recapButton</item>
<item name="android:textViewStyle">@style/recapText</item>
</style>
<style name="recapButton" parent="android:style/Widget.Button">
<item name="android:textSize">30sp</item>
<item name="android:background">#FF0000</item>
</style>
<style name="recapText">
<item name="android:textSize">30dip</item>
<item name="android:textColor">#FFFFFF</item>
</style>
</resources>
Тег приложения в файле манифеста выглядит следующим образом:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/recapmain">
<activity android:name="appname"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Это не работает. Приложение просто не реагирует на тему. Если я настрою конкретное представление на использование одного из стилей, оно будет работать идеально. Итак, я могу сделать это в XML-файле для действия:
<Button
android:id="@ id/OverviewButtonYears"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/years"
android:onClick="years"
style="@style/recapButton"
/>
Это придаст кнопке соответствующий стиль.
мы также пытались применить тему к определенному тегу активности, но безрезультатно.
Теперь, что действительно работает, так это удаление тега intent-filter из тега приложения и помещение его в тег activity, вот так:
<activity android:name=".PolicyTab" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Это запускает только определенное действие, и у него есть соответствующая тема.
Тогда мой вопрос в том, почему? Мы предположили, что это как-то связано с вкладками, поскольку запуск только одного действия активирует тему. Что нам нужно сделать, чтобы заставить его работать с вкладками?
Ответ №1:
Если вы хотите, чтобы ваша основная тема приложения была android:theme="@android:style/Theme.NoTitleBar"
с настраиваемыми стилями управления, вам следует расширить эту тему с учетом ваших предпочтений:
<style name="recapmain" parent="@android:style/Theme.NoTitleBar">
В этой строке будут применены стили родительской темы recapmain
, а внутри вы можете написать свои собственные настройки (как у вас уже есть для buttonStyle
и textViewStyle
).
Внутри вашего androidManifest.xml
вы устанавливаете тему приложения в своем пользовательском стиле:
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@style/recapmain">
Обновить
Ваш styles.xml должны содержать:
<style name="recapmain" parent="@android:style/Theme.NoTitleBar">
<item name="android:buttonStyle">@style/recapButton</item>
<item name="android:textViewStyle">@style/recapText</item>
</style>
<style name="recapButton" parent="android:style/Widget.Button">
<item name="android:textSize">30sp</item>
<item name="android:background">#FF0000</item>
</style>
<style name="recapText" parent="android:style/Widget.TextView">
<item name="android:textSize">30dip</item>
<item name="android:textColor">#FFFFFF</item>
</style>
Комментарии:
1. Однако сейчас мы столкнулись с другой проблемой. Хотя приложение распознает тему «recapmain», похоже, что она вообще не применяется к ссылкам @style / recapButton и @style / recapText. Он распознает родительский «NoTitleBar», и если я напишу что-то вроде этого: <название стиля=»recapmain» parent =»@android: стиль / тема. NoTitleBar»> /../ <название элемента=»android:background»>#FF0000</item> он применит цвет фона ко всему. Но если я удалю этот тег, он ничего не будет применять ни к кнопкам, ни к текстовым представлениям. Есть еще идеи?
2. вам следует оставить элементы ButtonStyle и textViewStyle в вашем
recapmain
теге style. Будут применены только те, которые находятся внутри этого тега (или других тегов стиля, на которые ссылаются ссылки). Таким образом, ваш стиль xml должен оставаться таким же, как в вашем post, просто поместитеparent="@android:style/Theme.NoTitleBar"
объявление в свойrecapmain
.3. Да, но проблема, похоже, в том, что эти ссылки не работают. Это как если бы @style / recapButton не указывал на <style>, имя которого «recapButton», потому что кнопки вообще не оформлены. Таким образом, приложение распознает стиль «recapmain», но ссылки внутри него не работают.
4. Затем убедитесь, что вы не применяли никаких других стилей к более низким уровням вашего приложения (конкретным макетам / представлениям / действиям). Я пробовал ваш код, не устанавливая ничего, кроме темы приложения, и все мои кнопки стали красными, а текстовые представления — огромными буквами.
5. Я больше нигде в коде не применял никаких стилей. Это ссылки, которые не работают. Если установить для «textColor» значение #FFFFFF непосредственно под тегом в стиле «recapmain», текст станет белым. Если вместо этого я использую #FFFFFF в другом теге стиля («recapText») и ссылаюсь на textColor в @style / recapText, это не сработает.