Android EditText原生选择器

时间:2011-08-29 08:52:54

标签: android android-edittext selector

我尝试将自己的设计应用于edittext并在我的edittext启用,聚焦等时使用Android原生选择器。问题是每次触摸edittext并且本机选择器正在工作时,我的edittext变得更小。任何人都可以建议为什么会发生这种情况?这是我的代码片段:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_window_focused="false" android:state_enabled="true"
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:state_window_focused="false" android:state_enabled="false"
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:state_pressed="true" 
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:state_enabled="true" android:state_focused="true" 
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:state_enabled="true" 
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:state_focused="true" 
    android:drawable="@android:drawable/edit_text"/>
<item 
    android:drawable="@drawable/my_border" />
</selector>

在这里我使用我的选择器:

 <EditText 
        android:layout_height="37dip" 
        android:layout_width="fill_parent"
        android:layout_marginLeft="7dip"
        android:layout_marginRight="7dip"
        android:background="@layout/selector_input"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:inputType="textEmailAddress">
    </EditText>

这是my_border的代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white"/>
    <stroke android:width="1dip" android:color="@color/border_green"/>
    <corners android:radius="4dp" /> 
    <padding android:left="1dip" android:top="1dip" android:right="1dip" android:bottom="1dip" />
</shape>

P.S。按钮完全一样。

4 个答案:

答案 0 :(得分:8)

起初,非常感谢您的帖子,帮了我很多, 但是你上面的代码(选择器的样本)对我来说不起作用:

所以我为其他人调整了它,所以如果有人搜索如何将文本字段标记为已选中

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/bottom_line_normal"/>
<item 
android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/bottom_line_normal"/>
<item 
android:state_pressed="true" 
android:drawable="@drawable/bottom_line_focus"/>
<item 
android:state_enabled="true" android:state_focused="true" 
android:drawable="@drawable/bottom_line_focus"/>
<item 
android:state_enabled="true" 
android:drawable="@drawable/bottom_line_normal"/>
<item 
android:state_focused="true" 
android:drawable="@drawable/bottom_line_focus"/>
<item 
android:drawable="@drawable/bottom_line_normal"/>
</selector>

玩得开心:=)祝你好运:)

答案 1 :(得分:1)

由于没有人能够完全回答我的问题,我将自己回答。问题是每次触摸它时我的edittext变小了。这是因为Android中的原生edittext背景周围有一个透明区域。所以我使用了一个图层列表来创建我的背景,周围也有一个透明区域。这是代码:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/transparent_background"
        android:top="5dip"
        android:right="5dip"
        android:bottom="5dip"
        android:left="5dip" />
    <item
        android:drawable="@drawable/my_border"
        android:top="0dip"
        android:right="0dip"
        android:bottom="0dip"
        android:left="0dip" />
</layer-list>

在我的选择器中而不是my_border我使用此xml。 而已。容易做到,很难找到如何!

答案 2 :(得分:0)

<item 
android:drawable="@drawablemy_border" /> 

1。你错过了斜线[/]吗?那个drawable my_border

的定义是什么?

答案 3 :(得分:0)

好的,在我尝试这些文件之后,当EditText未启用时,它不会使用你的选择器,并显示它的标准布局...所以添加

<item android:state_enabled="false" android:drawable="@android:drawable/edit_text"/> 你的选择器应该是解决方案