棒棒糖设备上的 EditText 没有以强调色着色

Posted

技术标签:

【中文标题】棒棒糖设备上的 EditText 没有以强调色着色【英文标题】:EditText not tinted in Accent color on lollipop devices 【发布时间】:2015-10-08 08:02:12 【问题描述】:

我是软件工程专业的学生,​​几个月前在业余时间开始学习 android 开发。

目前我正在制作我的第一个应用程序,同时在学习过程中遇到了问题。

我正在使用 DialogFragment,出于某种原因,我在主题中使用的强调色仅在棒棒糖之前的设备(模拟器和物理设备)中被覆盖。

您会注意到棒棒糖中只有浮动提示被着色。

我的 DialogFragment 布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_add_container"
android:layout_
android:layout_
android:orientation="vertical">

<android.support.design.widget.TextInputLayout
    android:id="@+id/input_title_layout"
    android:layout_
    android:layout_>

    <EditText
        android:id="@+id/input_title"
        android:layout_
        android:layout_
        android:layout_margin="16dp"
        android:hint="@string/dialog_add_title_hint"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true" />

</android.support.design.widget.TextInputLayout>

<android.support.design.widget.TextInputLayout
    android:id="@+id/input_password_layout"
    android:layout_
    android:layout_>

    <EditText
        android:id="@+id/input_password"
        android:layout_
        android:layout_
        android:layout_margin="16dp"
        android:hint="@string/dialog_add_password_hint"
        android:imeOptions="actionGo"
        android:inputType="text"
        android:singleLine="true" />

</android.support.design.widget.TextInputLayout>

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal">

    <Button
        android:id="@+id/input_cancel"
        style="?attr/buttonBarButtonStyle"
        android:layout_
        android:layout_
        android:layout_margin="16dp"
        android:layout_weight="1"
        android:text="Cancel" />

    <Button
        android:id="@+id/input_confirm"
        style="?attr/buttonBarButtonStyle"
        android:layout_
        android:layout_
        android:layout_margin="16dp"
        android:layout_weight="1"
        android:text="Add" />

</LinearLayout>

我的价值观/styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorHighlight</item>

    <!-- Context Action Mode will Overlay Toolbar -->
    <item name="windowActionModeOverlay">true</item>

</style>

我已经尝试了几种解决方案都无济于事:

    覆盖 colorControlActivated 和 colorControlNormal - 仅更改浮动提示色调

    以编程方式更改色调,但这只会更改下划线而不是聚焦:

    可绘制背景 = InputTextLayout.getEditText().getBackground(); DrawableCompat.setTint(背景, yourColor); InputTextLayout.getEditText().setBackground(background);

单独使用 EditText,不包含在 TextInputLayout 中,也无济于事。

有什么想法吗?

提前致谢

【问题讨论】:

您使用的是什么版本的设计支持库? 我使用的是 23.0.1 版本 【参考方案1】:

在通过互联网进行彻底搜索后,我在 *** 中偶然发现了一个关于为 DialogFragment 设置动画的问题 - here

该链接中的答案引用了一位 Google 工程师的帖子:

...DialogFragment 只是一个 Dialog 的包装器,用于帮助管理其生命周期。对话框是***窗口,因此它们的动画是窗口动画,就像在所有其他情况下使用 Dialog 时一样。因此,您可以通过 主题 或在其 WindowManager.LayoutParams 中设置的显式窗口动画样式来控制对话框的动画。

所以我决定检查如何为 DialogFragment 设置主题 并通过 CodePath 找到本指南 - here

基本上,在您的应用主题中,为了覆盖对话框主题,您必须添加以下内容:

<style name="AppTheme" parent...>
    ....

    <!-- this will override DialogFragment theme -->
    <item name="android:dialogTheme">@style/MyDialogFragmentTheme</item>
    <!-- this will override AlertDialog theme -->
    <item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
</style>

<style name="CustomAlertDialogTheme.Animation">
    ...
</style>

<style name="MyDialogFragmentTheme" parent="Theme.AppCompat.Light.Dialog">
    ...
</style>

在每个主题中,您都可以覆盖 colorPrimary、colorAccent 等属性。

如果使用此方法使您的 DialogFragment 显示为没有标题(这发生在我身上),则将以下内容添加到其样式中:

<item name="android:windowNoTitle">false</item>

奖励 - 添加动画

要向 AlertDialog 或 DialogFragment 添加动画,请在其样式中编写以下内容:

<style name="MyDialogFragmentTheme" parent="Theme.AppCompat.Light.Dialog">
        ...
        <item name="android:windowAnimationStyle">@style/MyDialogFragmentTheme.Animation</item>

</style>

那么你需要为动画创建一个样式,例如:

<style name="MyDialogFragmentTheme.Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_slide_in_up</item>
        <item name="android:windowExitAnimation">@anim/dialog_slide_out_down</item>
        <item name="android:interpolator">@android:interpolator/anticipate</item>
</style>

上面链接的 CodePath 指南中有更多信息。

请注意,这一切都发生在 values/styles.xml 中

希望这对其他人有所帮助。

【讨论】:

以上是关于棒棒糖设备上的 EditText 没有以强调色着色的主要内容,如果未能解决你的问题,请参考以下文章

检测应用程序正在棒棒糖设备中卸载

html 在android棒棒糖中着色镀铬头

“房子用三色着色”是NP吗?

大通知图标背景

使用配置 APK,同时仍以棒棒糖前设备为目标

图着色问题