Android使用形状,选择器或列表的不同状态的不同EditText背景

Dav*_*mes 14 android state styles shape android-edittext

我正在开始一个新的应用程序,我使用ActionBarSherlock和HoloEverywhereLib.我的min和目标SDK是相同的(10/2.3.3).这只是我可以使用他们拥有的Android运行时快速将其移植到亚马逊Kindle和BB10(已经使用此设置为另一个应用程序,它没有问题).应用程序应该尽可能接近ICS/JB.

对于我的EditTexts,我给他们一个Girgerbread/iOS(圆角,但没有阴影)看他们

几个星期前有人向我提到要抓住Gingerbread的drawable并将它们用于我的EditTexts.但我开始使用我在S/O找到的另一个答案,非常简单:

<EditText
 background:"@drawable/edittext_round_white"
 ..../>
Run Code Online (Sandbox Code Playgroud)

&我的edittext_round_white.xml:

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape="rectangle"
  >
  <corners android:radius="8dp"/>
<stroke android:width="1dp"
    android:color="#444"/>
<solid android:color="#FFFFFF" />
  </shape>
Run Code Online (Sandbox Code Playgroud)

现在,当我运行应用程序时,有两件事情是不对的

a)根本没有"焦点"(我知道我需要实现这一点,这是问题的关键)

b)光标在我的edittext中根本没有出现(灰色垂直线暗示输入所指向的edittext中的位置)

对于a)我假设我要使用某种选择器或列表,对吧?怎么样?我是Android的样式新手,任何帮助将不胜感激.我唯一要改变的是笔触颜色.

对于b)如何让光标显示?

这里的任何提示/链接/等都非常受欢迎!

小智 27

我建议使用NinePatch图像来自定义EditText.这是基于我的代码的示例:

选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/twitter_im_edittext_normal" />
  <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/twitter_im_edittext_normal" />
  <item android:state_pressed="true" android:drawable="@drawable/twitter_im_edittext_normal" />
  <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/twitter_im_edittext_focused" />
  <item android:state_enabled="true" android:drawable="@drawable/twitter_im_edittext_normal" />
  <item android:state_focused="true" android:drawable="@drawable/twitter_im_edittext_focused" />
  <item android:drawable="@drawable/twitter_im_edittext_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)

使用与代码中使用的方法相同的选择器,将其设置为EditText的背景.

图片:

twitter_im_edittext_focused.9.png twitter_im_edittext_focused.9.png

twitter_im_edittext_normal.9.png twitter_im_edittext_normal.9.png

有关NinePatch图像的更多信息,请点击此处.

希望能帮助到你.


Kar*_*oki 7

接受答案的简短版本

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_focused="true"
        android:drawable="@drawable/edit_text_background_focused" />
    <item android:drawable="@drawable/edit_text_background_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)