所有 Activity 视图未选择主题

5

我有这个自定义样式:

<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>

我将这种新风格作为主题应用于我的某个活动中,方法是在我的清单中添加以下内容:

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

结果不是我预期的那样。只有少数视图采用了自定义样式。以下图像显示两个视图。第一个 FIELD ONE 是可以的。FIELD TWO 字段无法采用该样式。

enter image description here

这是这两个字段的定义:

<android.support.design.widget.TextInputLayout
    android:id="@+id/til_email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <AutoCompleteTextView
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/prompt_email"
        android:inputType="number"
        android:imeOptions="actionNext"
        android:maxLines="1"
        android:singleLine="true" />
</android.support.design.widget.TextInputLayout>

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

    <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>

请问,有什么想法吗?


如果从EditText中删除输入类型,这样做是否可以?这可能是密码... - Uriel Frankel
我无法删除inputtype,因为这是一个密码字段。 - user1506104
我只想了解这是否是由于密码引起的。 - Uriel Frankel
是的,由于密码字段。有什么想法? - user1506104
我还在SO上检查了其他解决方案,常见的解决方案是删除InputType。但在我的情况下,我不能这样做,因为这是一个密码字段。 - user1506104
显示剩余2条评论
2个回答

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资源设置提示文本颜色、大小和样式。

现在当您使用您的样式时,它只会改变字体系列,但保持8sp的textSize和黑色的textColor。这就是为什么我向您的自定义样式添加了这两个属性。


嗯...这真的很奇怪。这个解决方案在我的项目上不起作用。 - user1506104
你的compileSdkVersion是多少,以及你的设备运行的Android版本是什么? - Rosário Pereira Fernandes
compiledSdkVersion 是 26;minSdkVersion 是 19;我的设备是 Android 7.1.1(Nougat)。 - user1506104
我在相同的条件下进行了测试。你的支持库是否是最新的? - Rosário Pereira Fernandes
和你在问题中所做的一样。 - Rosário Pereira Fernandes
显示剩余2条评论

0

由于只有一个视图受到影响,我并不介意使用以下Java代码来解决它:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接