it-roy-ru.com

Android различные фоны EditText для разных состояний с использованием фигур, селектора или списка

Я запускаю новое приложение, в котором я использую ActionBarSherlock & HoloEverywhereLib. Мои min и target SDK одинаковы (10/2.3.3). Это просто для того, чтобы я мог также быстро перенести его на Amazon Kindle & BB10, используя Android среду выполнения, которую они использовали (эта настройка уже использовалась для другого приложения, и она работала без проблем). При этом приложение должно выглядеть как можно ближе к ICS/JB.

Для моих EditTexts я даю им Girgerbread/iOS (закругленные углы, но без теней)

Кто-то упомянул мне несколько недель назад, что я могу взять чертежи для Gingerbread и использовать их в моих EditTexts. но я начал использовать другой ответ, который я нашел здесь в S/O, очень просто:

<EditText
 background:"@drawable/edittext_round_white"
 ..../>

& мой 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>

Теперь, когда я запускаю приложение, две вещи не так

а) нет вообще никакого "фокуса" (я знаю, что мне нужно это реализовать, в этом суть вопроса)

б) курсор не отображается вообще в моем тексте редактирования (серая вертикальная линия указывает на то, куда в тексте редактирования направлен ввод)

Для а) Я предполагаю, что должен использовать какой-то селектор или список, верно? как? Я новичок в стилизации в Android, и любая помощь будет оценена. Единственное, что я собираюсь изменить, это цвет обводки.

Б) как сделать так, чтобы курсор появился?

Любые намеки/ссылки/и т.д. здесь очень приветствуются!

10
David Homes

Я предлагаю использовать изображения 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>

Используйте селектор так же, как вы использовали в своем коде, установите его в качестве фона вашего 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 вы можете найти здесь .

Надеюсь, поможет.

23
alex bandol

Краткая версия принятого ответа

<?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>
7
Karioki

Я думаю, что проблема в том, что ваш курсор находится выше левой границы или стены поля editText и не виден из-за перекрытия.

Что я сделал, так это добавил несколько отступов для текста, и это переместило курсор и текст более "внутрь", и оно стало видимым.

Попробуйте добавить это в ваш editText:

Android:paddingLeft="8dp" 
0
dadoz