EditText_フォーカス制御_と_入力を不可にするときのコード

 

androidのEditTextクラスについてお尋ねします。


別に ボタンを2つ用意して


一つ目のボタンで edittextをフォーカス状態にして、


もうひとつのボタンでフォーカスを解除して

edittextへの入力を不可にする、


というような edit textクラスのメソッドはあるのでしょうか?



Androidの`EditText`クラスを使用して、

ボタンの操作に応じてフォーカスを設定したり

解除したりする方法について説明します。


以下のように実現できます:


### 必要なメソッドとプロパティ


1. **フォーカスを設定する:** 

 

   - `editText.requestFocus()` を呼び出します。

これにより、`EditText`がフォーカス状態になります。


2. **フォーカスを解除する:**  


   - `editText.clearFocus()` を呼び出します。

これにより、`EditText`からフォーカスが外れます。


3. **入力を不可にする:**  


   - `editText.setFocusable(false)` を使用します。

このプロパティを`false`に設定すると、

ユーザーが`EditText`に入力できなくなります。


4. **入力を可能にする:**  


   - `editText.setFocusable(true)` を使用します。

さらに、`editText.setFocusableInTouchMode(true)` 

を設定することで、

タッチ操作でもフォーカス可能にできます。


---


### サンプルコード


以下は、ボタンを使ってフォーカスの設定や解除、

入力の許可や禁止を切り替える例です。


```kotlin


import android.os.Bundle

import android.widget.Button

import android.widget.EditText

import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)


        val editText

= findViewById<EditText>(R.id.editText)

        val focusButton

= findViewById<Button>(R.id.focusButton)

        val clearFocusButton

= findViewById<Button>(R.id.clearFocusButton)


        // フォーカスを設定するボタン

        focusButton.setOnClickListener {

            editText.requestFocus()

        }


        // フォーカスを解除して入力不可にするボタン

        clearFocusButton.setOnClickListener {

            editText.clearFocus()

// 入力不可

            editText.setFocusable(false) 

        }


        // 再度入力可能にする場合(必要であれば追加)

        clearFocusButton.setOnLongClickListener {

            editText.setFocusable(true)

// タッチ操作でフォーカス可能

            editText.setFocusableInTouchMode(true) 

            true

        }

    }

}

```


---


### レイアウト例(XML)


上記コードに対応するレイアウトの例です:


```xml


<LinearLayout


    xmlns:android

="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:padding="16dp">


    <EditText

        android:id="@+id/editText"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="入力してください" />


    <Button

        android:id="@+id/focusButton"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="フォーカス設定" />


    <Button

        android:id="@+id/clearFocusButton"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="フォーカス解除 & 入力不可" />

</LinearLayout>



```


---


### 補足


- `clearFocus()` はビューのフォーカスを外すだけで、

入力不可にはしません。

そのため、`setFocusable(false)` を併用する必要があります。



- フォーカス解除時に他のビューにフォーカスが移る場合は、

`window.decorView` を使用してフォーカスを外すことができます。



必要に応じてカスタマイズしてください!



コメント