Диалог Theme.DeviceDefault принудительно - PullRequest
0 голосов
/ 02 мая 2018

Я делаю диалог, в котором я хочу показать EditTexts и Radio кнопки.

Но тема не применяется. Согласно Layout Inspector, к представлениям применяется правильная тема (показана «принудительно»), но есть «android: style / Theme.DeviceDefault ()», которая также «принудительно» (она отображается над моим стилем, если это вопросы).

Проблема в том, что представления выглядят по-разному на разных API, что, я думаю, вызвано этим DeviceDefault. Я нигде не установил ничего об DeviceDefault, но он применим ко всем моим диалогам.

Есть идеи, как это уволить? Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

О Theme.DeviceDefaul в Android:

Для устройств Android доступно множество тем.

  • Тема : по умолчанию для самых ранних версий Android до 2.3 Gingerbread (10)
  • Theme.Holo : от Android 3.0 Honeycomb (11)
  • Theme.Material : от Android 5.0 Lollipop (21)
  • Theme.DeviceDefault : от Android 4.0 Ice Cream Sandwich (14) - тема, настраиваемая производителем устройства. Он представляет родной вид устройства.

Задание разных тем:

Система наложения ресурсов Android позволяет задавать стили в зависимости от уровня API устройства, через Android Studio.

Например, разные версии стиля в res / values-v11 и res / values-v21 .

/ res / values ​​/ styles.xml применяется к каждому устройству и служит основой:

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

/ res / values-v11 / styles.xml загружается на все устройства с API уровня 11 и выше (включая устройства с 21 и выше):

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light"/>
</resources>

/ res / values-v21 / styles.xml загружается на все устройства с уровнем API 21 и выше:

<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light"/>
</resources>

AndroidManifest.xml - это место, где используется пользовательская тема.

<application
    android:theme="@style/AppTheme"
    ...
0 голосов
/ 19 мая 2018

Каждый уровень API имеет свою собственную тему по умолчанию, и, поскольку вы используете тему по умолчанию для своего приложения, android настраивает тему в зависимости от уровня API, который будет отличаться на каждом устройстве. Просто помните, что только элемент, к которому вы добавляете атрибут style, получает указанные атрибуты style. Дочерние объекты или дочернее представление не получают атрибут стиля. Если вы хотите, чтобы дочерние представления наследовали стили, вместо этого примените стиль с атрибутом android:theme.

Проблема связана с тем, где и как вы применяете свою собственную тему. Вы должны применить свою тему в файле AndroidManifest.xml. Если вы примените свою тему в application tag или activity tag, вы охватите различные части приложения своей темой. Трудно сказать, что вы сделали, без какого-либо кода.

Вы должны применить свою тему к одному из следующих разделов файла.

Для покрытия всего приложения

<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    </application>
</manifest>

Чтобы охватить только одно занятие

<manifest ... >
    <application ... >
        <activity android:theme="@style/Theme.AppCompat.Light" ... >
        </activity>
    </application>
</manifest>

Если представление поддерживает только некоторые атрибуты, которые вы объявили в стиле, который вы создали, то оно применяет только те атрибуты и игнорирует те, которые оно не поддерживает.

Если вы хотите изменить стиль и цвета по умолчанию, вы можете переопределить их в файле styles.xml. Найдите имя элемента, представляющего значение цвета, и измените соответствующее значение в файле res/values/colors.xml.

Я надеюсь, что эта информация решит вашу проблему, но, как я уже сказал, это действительно трудно, так что точно сказать без кода.

...