扩展Widget的样式继承

ale*_*lex 5 android android-custom-view android-theme android-5.0-lollipop

在我的项目(支持AppCompat的Target API 21)中,我需要扩展EditText该类.我的问题是MyEditText类不继承EditText自定义的样式:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" >
    <item name="colorPrimary">@color/primary</item>
    <item name="colorControlNormal">@color/grey_light</item>
    <item name="colorControlActivated">@color/primary</item>
    <item name="colorControlHighlight">@color/primary</item>
</style>
Run Code Online (Sandbox Code Playgroud)

与@color/primary绿色


截图:

在此输入图像描述

  • 第1行:EditText专注
  • 第2行:EditText未聚焦(启用)
  • 第3行:MyEditText未聚焦(启用)

我的问题是:我如何继承默认EditText样式MyEditText?

Luc*_*tos 6

有一种非常非常非常容易的方式.

而不是从您自定义EditText继承自android.widget.EditText,继承此类并查看它是否有效:

android.support.v7.internal.widget.TintEditText
Run Code Online (Sandbox Code Playgroud)

链接到类:TintEditText.java

阅读该课程的Javadoc,他说:

/**
 * An tint aware {@link android.widget.EditText}.
 * <p>
 * This will automatically be used when you use {@link android.widget.EditText} in your
 * layouts. You should only need to manually use this class when writing custom views.
 */
Run Code Online (Sandbox Code Playgroud)

在本页的前面(使用支持库API)需要注意:使用支持库中的类时,请确保从相应的包中导入类.例如,在应用ActionBar类时:

  • 使用支持库时android.support.v7.app.ActionBar.
  • android.app.ActionBar仅在API级别11或更高级别开发时.

我解释了这一点,也就是说,如果您使用的是支持库,请始终尝试导入或继承相应的包.(没有什么比这写的大声笑:D)