我有这种自定义风格:
<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字段不会选择样式。
以下是这两个字段的定义:
...
<activity android:name=".MyActivity"
android:theme="@style/AppTheme.AppText"/>
...
请知道吗?
答案 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);