#Tips色々
EditTextを使用する上でのTipsを纏めます。
##フォーカスが当たっている状態で、キーボードのエンターキーを押下した時に任意の処理を行う
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はこのような仕様になっています。
<EditText
<!--省略-->
android:selectAllOnFocus="true"/>
##選択した文字のハイライト色を設定する
デフォルトでは青みがかった色で選択箇所が表現されていますが、EditTextの背景色を変更した場合など見えづらくなってしまう場合があります。
<EditText
<!--省略-->
android:textColorHighlight="お好きな色" />
##キーボードをバックキーで閉じたときに、EditTextからフォーカスを外す
他のViewをタップして閉じた場合は、タップしたビューへフォーカスが当たるのでEditTextから外れますが、バックキーで閉じた場合はフォーカスは当たったままです。
結構煩わしいんですが、軽く調べたところ良しなに対応してくれるプロパティのようなものは存在しないため、独自ビューを作成することになります。
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)
}
}
###使い方
<editext.customview.DisableNoFocusEditText
<!--省略-->
/>
##プレースホルダを設定する
hint属性を使用します。
<EditText
<!--省略-->
android:hint="メールアドレス" />
##プレースホルダとEditTextのフォントサイズに別々の値を設定する
プレースホルダの文字をstrings.xmlに定義し、Font要素を適用します。
resourceファイルでも定義できるようです。
<string name="mail_address"><font size="14">メールアドレス</font></string>
<EditText
<!--省略-->
android:textSize="20sp"
android:hint="@string/mail_address" />
##改行
###改行可能(デフォルト)
<EditText
<!--省略-->
android:inputType="textMultiLine" />
###改行不可
<EditText
<!--省略-->
android:inputType="text" />