gpt4 book ai didi

android - 不同文字大小的主题不起作用

转载 作者:行者123 更新时间:2023-11-29 01:38:06 24 4
gpt4 key购买 nike

我想在我的应用程序中有两个主题:一个具有正常字体大小,一个具有较小的字体大小。我需要在 Activity 的 onCreateonStart 中动态更改主题。

我定义了两个主题(文件 themes.xml):

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


<!-- Default theme with normal font size. This one is set for the whole app in the manifest -->
<style name="NormalTheme" parent="AppBaseTheme">
<item name="android:textAppearance">@style/NormalTextSize</item>
<item name="android:textAppearanceLarge">@style/NormalTextSize.Large</item>
<item name="android:textAppearanceMedium">@style/NormalTextSize.Medium</item>
<item name="android:textAppearanceSmall">@style/NormalTextSize.Small</item>

<item name="android:editTextStyle">@style/EditText_NormalTextSize</item>
</style>


<!-- Small font size -->
<style name="SmallFontTheme" parent="NormalTheme">
<item name="android:textAppearance">@style/SmallTextSize</item>
<item name="android:textAppearanceLarge">@style/SmallTextSize.Large</item>
<item name="android:textAppearanceMedium">@style/SmallTextSize.Medium</item>
<item name="android:textAppearanceSmall">@style/SmallTextSize.Small</item>

<item name="android:editTextStyle">@style/EditText_SmallTextSize</item>
</style>

在文件 styles.xml 中,我为每个主题定义了样式集:

<!-- Normal font -->
<style name="NormalTextSize" parent="@android:style/TextAppearance">
<item name="android:textSize">16sp</item>
</style>
<style name="NormalTextSize.Large" >
<item name="android:textSize">22sp</item>
</style>
<style name="NormalTextSize.Medium" >
<item name="android:textSize">18sp</item>
</style>
<style name="NormalTextSize.Small" >
<item name="android:textSize">14sp</item>
</style>
<style name="EditText_NormalTextSize" parent="@android:style/Widget.EditText">
<item name="android:textSize">16sp</item>
</style>


<!-- Small font -->
<style name="SmallTextSize" parent="@android:style/TextAppearance">
<item name="android:textSize">14sp</item>
</style>
<style name="SmallTextSize.Large" >
<item name="android:textSize">20sp</item>
</style>
<style name="SmallTextSize.Medium" >
<item name="android:textSize">16sp</item>
</style>
<style name="SmallTextSize.Small" >
<item name="android:textSize">12sp</item>
</style>
<style name="EditText_SmallTextSize" parent="@android:style/Widget.EditText">
<item name="android:textSize">14sp</item>
</style>

为了测试主题变化,我创建了一个 Activity 并添加了两个 TextView(一个带有 textAppearanceLarge,一个带有 textAppearanceSmall)。我还添加了一个 EditText 和一个 ListView 。我没有触及这些 View 的任何样式属性,我将它们放在布局编辑器中时保持原样。我的目标是更改整个应用的主题,而不必为每个小部件定义样式或外观。

我还添加了一些按钮来触发主题更改:新主题资源 ID 存储在首选项中,然后 Activity 自行完成并启动同一测试 Activity 的新 Intent。该 Activity 读取 onCreateonStart 中的当前主题设置并调用 setTheme。此主题设置更改有效,但只有 ListView 正在调整文本大小:TextViewsEditText 不调整大小。

所以我的问题是我到底做错了什么。我已经学习了 3-4 个教程并且我的风格与它应该工作的是一致的。

请注意,我只覆盖了主题中的文本外观,因为我认为几乎每个基于文本的小部件都会单独根据外观调整大小(当从布局编辑器中删除时,每个小部件都有一个外观)。我在某处读到它不是那样工作的(如果是这样,谷歌的干得好)并且你需要为主题内的每种小部件定义文本大小。在上面的示例中,我重写了 editTextStyle 但没有成功。我也尝试过具有相同结果的按钮和 TextView 。但令我感到困惑的是,屏幕上最复杂的小部件 ListView 可以正确调整大小而无需为其定义样式,而最简单的小部件却不能,即使是在为那些特定类型的小部件定义样式时也是如此!

最佳答案

主题不错。

问题出在 Activity 上。您需要在 setContentView 之前调用 setTheme

感谢 @mozarty为他的answer

关于android - 不同文字大小的主题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com