EditText内にテキストを固定する

EditText固定テキストを表示したい場合は次の2つの方法があります。

1つめのHintプロパティは設定は簡単ですが、テキストエディットが空の場合にしか固定テキストは表示されません。

そこでここでは2つめの方法について紹介します。

まず、次のようなレイアウトファイル(activity_main.xml)を作成しました。

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    
    <EditText
        android:id="@+id/edit1" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:singleLine="true" >
    </EditText>
    <EditText
        android:id="@+id/edit2" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:singleLine="true" >
    </EditText>

</LinearLayout>

2つのエディットテキストを縦に並べて設置しています。

次にアクティビティクラス内でエディットテキストの一方(IDがedit1のもの)だけに固定テキストを表示してみます。以下がそのコードです。

public class MainActivity extends Activity
{
    
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        EditText edit1 = (EditText)findViewById(R.id.edit1);
        EditText edit2 = (EditText)findViewById(R.id.edit2);
        
        final String fixText = " FIXED";
            //固定テキスト
        
        edit1.setOnFocusChangeListener(new View.OnFocusChangeListener() 
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus) 
            {
                EditText edit = (EditText)v;
                String text = edit.getText().toString();
                    //フォーカスが当たっていれば固定テキストを表示
                if(hasFocus){
                    text = in_text.replace(fixText, "");
                    text += fixText;
                }
                edit.setText(text);
            }
        });
        edit1.setOnKeyListener(new View.OnKeyListener()
        {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) 
            {
                EditText edit = (EditText)v;
                String text = edit.getText().toString();

                int fixTextLen = fixText.length();
                //適切な位置にカーソルを移動させる
                if(edit.getSelectionEnd() == text.length() - fixTextLen){
                    edit.setSelection(text.length() - fixTextLen);
                        //固定文字の前にカーソルを持ってくる。
                }
                return false;
            }
        });
    
    }
}

簡単にこのコードの流れを説明すると以下のような流れになっています。

  1. フォーカスのエディットが変更されたらエディット内の文字列を取得。
  2. フォーカスがエディットに当たっていた場合に取得文字列中に固定テキストが含まれていたらいったん消す。
  3. 取得した文字列の右側に固定テキストを表示する。
  4. もしgetSelectionEndメソッドで取得したカーソル位置が固定テキストの中にあったときはsetSelectionメソッドで固定テキストの前までカーソルを移動させる。

このアプリを実行するとエディットテキストの1番目に何か入力すると、その後ろに" FIXED"という固定テキストが右側に表示されます。

関連項目
プライバシーポリシー