4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】EditTextに関するTips

Last updated at Posted at 2019-01-05

#Tips色々
EditTextを使用する上でのTipsを纏めます。

##フォーカスが当たっている状態で、キーボードのエンターキーを押下した時に任意の処理を行う

HogeFragment.kt
private fun setListener() {
    editText.setOnKeyListener { v, keyCode, event ->
        if (event.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
            val inputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            // キーボード閉じる処理
            inputMethodManager.hideSoftInputFromWindow(v.windowToken, InputMethodManager.RESULT_UNCHANGED_SHOWN)
            // 実行したい処理 START
            search()
            // 実行したい処理 END
            true
        }
        false
    }
}

##フォーカスを当てたときに、入力されている文字を全選択する
Google Chromeはこのような仕様になっています。

layout.xml
<EditText
    <!--省略-->
    android:selectAllOnFocus="true"/>

##選択した文字のハイライト色を設定する
デフォルトでは青みがかった色で選択箇所が表現されていますが、EditTextの背景色を変更した場合など見えづらくなってしまう場合があります。

layout.xml
<EditText
    <!--省略-->
    android:textColorHighlight="お好きな色" />

##キーボードをバックキーで閉じたときに、EditTextからフォーカスを外す
他のViewをタップして閉じた場合は、タップしたビューへフォーカスが当たるのでEditTextから外れますが、バックキーで閉じた場合はフォーカスは当たったままです。

結構煩わしいんですが、軽く調べたところ良しなに対応してくれるプロパティのようなものは存在しないため、独自ビューを作成することになります。

DisableNoFocusEditText.kt
package editext.customview

import android.content.Context
import android.util.AttributeSet
import android.view.KeyEvent
import android.view.View
import android.widget.EditText

/**
 * キーボードが閉じたとき、フォーカスを外すEditText
 */
class DisableNoFocusEditText: EditText {

    constructor(context: Context): super(context)
    constructor(context: Context, attrs: AttributeSet): super(context, attrs)
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr)

    override fun onKeyPreIme(keyCode: Int, event: KeyEvent?): Boolean {
        if (keyCode == KeyEvent.KEYCODE_BACK && event?.action == KeyEvent.ACTION_UP) {
            // 親ビューにフォーカスをあてる
            val parent = parent as View
            parent.isFocusable = true
            parent.isFocusableInTouchMode = true
            parent.requestFocus()
        }
        return super.onKeyPreIme(keyCode, event)
    }
}

###使い方

layout.xml
<editext.customview.DisableNoFocusEditText
    <!--省略-->
    />

##プレースホルダを設定する
hint属性を使用します。

layout.xml
<EditText
    <!--省略-->
    android:hint="メールアドレス" />

##プレースホルダとEditTextのフォントサイズに別々の値を設定する
プレースホルダの文字をstrings.xmlに定義し、Font要素を適用します。
resourceファイルでも定義できるようです。

strings.xml
    <string name="mail_address"><font size="14">メールアドレス</font></string>
layout.xml
<EditText
    <!--省略-->
    android:textSize="20sp"
    android:hint="@string/mail_address" />

##改行
###改行可能(デフォルト)

layout.xml
<EditText
    <!--省略-->
    android:inputType="textMultiLine" />

###改行不可

layout.xml
<EditText
    <!--省略-->
    android:inputType="text" />
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?