如何覆盖edittext的Theme.AppCompat.Light.DarkActionBar主题

时间:2016-05-10 12:17:32

标签: android material-design

我正在尝试为EditText(MyEditText)创建一个样式,它继承自基本主题并添加了额外的属性设置。

<style name="MyMaterialTheme" parent="MyMaterialTheme.Base">
    <item name="homeAsUpIndicator">@drawable/ic_back_indicator</item>
</style>

<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MyEditText" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:background">#dbffb1</item>
</style>

当将MyEditText样式应用于EditText控件时,现有样式(来自主题)似乎被覆盖(如EditText下的行消失)。在布局中为EditText更改背景时会发生同样的事情。

我正在使用targetSdkVersion 23。 我想知道从默认主题覆盖单个属性的正确方法是什么。

以下是布局中EditText的代码(由@ 3amoura提出):

<EditText android:layout_width="match_parent"
    android:layout_height="82dp"
    android:id="@+id/et_description"
    android:inputType="textMultiLine|textLongMessage"
    android:lines="10"
    android:hint="Describe your complaint in details"
    android:gravity="top"
    style="@style/MyEditText" />

2 个答案:

答案 0 :(得分:1)

MyEditText的样式应该继承自 Widget.AppCompat.EditText 而不是 Theme.AppCompat.Light.DarkActionBar ,以便

<style name="MyEditText" parent="Widget.AppCompat.EditText">
<item name="android:background">#dbffb1</item>

然后使用EditText xml中的样式

答案 1 :(得分:0)

已修改

如果您只想添加绘制的线条的颜色 - &gt; setBackgroundTint

如果要更改背景颜色和线条颜色,则自定义图层列表或选择器将是唯一选项。样本图层列表

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#dbffb1" /> <!-- background color-->
    </shape>
</item>

<item
    android:top="-2dp"
    android:right="-2dp"
    android:left="-2dp">
    <shape>
        <solid android:color="@android:color/transparent" />
        <stroke
            android:width="1dp"
            android:color="@color/colorAccent" />  <!-- color of stroke -->
    </shape>
</item>
</layer-list>