web-dev-qa-db-ja.com

Androidシェイプ、セレクター、またはリストを使用した、さまざまな状態のさまざまなEditText背景

ActionBarSherlockとHoloEverywhereLibを使用する新しいアプリを開始しています。私の最小SDKとターゲットSDKは同じです(10/2.3.3)。これは、Androidランタイムを使用してAmazon Kindle&BB10にすばやく移植できるようにするためです(すでにこのセットアップを別のアプリで使用しており、問題なく動作しました)。 ICS/JBにできるだけ近い外観にする必要があります。

しかし、私のEditTextsについては、Girgerbread/iOS(角は丸いが、影はない)をそれらに見せています。

数週間前、誰かがジンジャーブレッドのドローアブルを入手して、私のEditTextに使用するように言ってきました。しかし、私はここ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>

さて、アプリを実行すると、2つのことが正しくありません

a)「フォーカス」はまったくありません(これを実装する必要があることは承知しています。それが問題のポイントです)

b)カーソルが編集テキストにまったく表示されない(編集テキストのどこに入力が向けられているかを示す灰色の縦線)

A)ある種のセレクターまたはリストを使用する必要があると思いますよね?どうやって? Androidのスタイリングは初めてですが、助けていただければ幸いです。変更するのはストロークの色だけです。

B)カーソルを表示するにはどうすればよいですか?

ここでのヒント/リンクなどは大歓迎です!

14
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画像についての詳細 ここ

それが役に立てば幸い。

26
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