2012-03-05 10 views
3

私はユーザー定義のテキストラベルを表示するEditTextを持っています。 青色の背景に白い文字が表示されます。編集中にAndroidのAndroid EditTextの背景とフォントの色を変更するにはどうすればよいですか?

しかし、人がクリックすると、黒い文字で白い背景に変更して、編集モードになっていることを示します。

それから人がそれをクリックすると、前と同じように青色に白く戻ってきます。また、入力したテキストがディスプレイよりも広い場合は、左寄せしたいと思います。

どうすればいいですか?

答えて

6

これを試してください。

edittext.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       v.setBackgroundColor(Color.WHITE); 
       ((EditText) v).setTextColor(Color.BLACK); 
      } else { 

       v.setBackgroundColor(Color.BLUE); 
       ((EditText) v).setTextColor(Color.WHITE); 
      } 

     } 
    }); 
+1

.. textWatcherで試すことができます。 XMLレイアウトマネージャでこれを行うことは可能ですか?また、フォーカスを失うことを正当化する方法は? –

2

それを達成するために様々な方法があります。テキストウォッチャーを使用してこのようにすることができます

public void afterTextChanged(Editable s) {} 

public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
public void onTextChanged(CharSequence s, int start, int before, int count) 
{ 
// do some operation on text of text1 field 
// do some operation on text of text2 field 
} 

レイアウトでこれを達成できるかどうかはわかりません。レイアウトでセレクタを使用してみてください。これはうまくいくかもしれません。テキストカラーでは別のセレクタを使用し、edittextバックグラウンドでは別のセレクタを使用します。セレクタの形式は次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="" /> <!-- pressed --> 
    <item android:state_focused="true" 
      android:color="" /> <!-- focused --> 
    <item android:color="" /> <!-- default --> 
</selector> 

色属性で色を指定してください。

+0

残念ながら、xmlはEditTextでは機能しません。また、TextWatcherは、ユーザーが入力を開始すると登録されるだけなので、機能しません。 –

2

私はそれはあなたに役立つかもしれないと思う

EditText text=new EditText(this); 
text.addTextChangedListener(new TextWatcher() { 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
    //change the color before editing 

} 

@Override 
public void afterTextChanged(Editable s) { 
    //change the color after edited 
} 
}); 

以下のようにして、おかげ

+0

これは実際には、ユーザーが入力を開始するまで色を変更しません –