所有活动视图都没有选择主题

时间:2017-12-23 12:33:20

标签: android view themes

我有这种自定义风格:

<div class="wrapper">
  <svg version="1.1" id="elp-badge" class="headerbadge" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 289.1 289.1" enable-background="new 0 0 289.1 289.1" xml:space="preserve">
    <circle class="circle" fill="#1e90ff" stroke="red" stroke-width="5" cx="144.5" cy="144.5" r="144.5"/>       
  </svg>
</div>

我通过在清单中添加以下内容,将此新样式作为主题应用于我的一项活动:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.AppText">
        <item name="android:fontFamily">@font/book_family</item>
    </style>
</resource>

结果不是我的预期。只有少数几个视图选择了自定义样式。下图显示了两个视图。第一个FIELD ONE没关系。 FIELD TWO字段不会选择样式。

enter image description here

以下是这两个字段的定义:

...
<activity android:name=".MyActivity"
            android:theme="@style/AppTheme.AppText"/>
...

请知道吗?

2 个答案:

答案 0 :(得分:4)

似乎主题不适用于密码字段,可能是出于安全原因。但我找到了解决密码字段样式的工作。您只需要为自定义样式添加另外两个属性:

<style name="AppTheme.AppText">
        <item name="android:fontFamily">@font/book_family</item>
        <item name="android:textColor">@color/colorAccent</item>
        <item name="android:textSize">14sp</item>
</style>

然后在TextInputLayout上使用app:hintTextAppearance。您的密码字段如下所示:

<android.support.design.widget.TextInputLayout
    android:id="@+id/til_password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    app:hintTextAppearance="@style/AppTheme.AppText">

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/prompt_password"
        android:imeActionId="6"
        android:imeActionLabel="@string/action_sign_in_short"
        android:imeOptions="actionUnspecified"
        android:inputType="numberPassword"
        android:maxLines="1"
        android:singleLine="true" />
</android.support.design.widget.TextInputLayout>

说明:如文档中所述,hintTextAppearance:

  

设置指定的提示文本颜色,大小,样式   TextAppearance资源。

现在,当您按原样使用样式时,它只会更改字体系列,但会将textSize保持在8sp,将textColor设置为黑色。这就是我将这两个属性添加到您的自定义样式的原因。

答案 1 :(得分:0)

由于只有一个视图受到影响,我不介意用Java解决它:

TextInputLayout til_passw = findViewById(R.id.til_password);
Typeface typeface = ResourcesCompat.getFont(this, R.font.book_family);
til_passw.setTypeface(typeface);