AndroidでEditTextを無効にする


195

私のアプリケーションでは、ユーザーが読み取りアクセスのみを持ち、書き込みアクセスを持たないEditTextを持っています。

コードで設定しましたandroid:enabled="false"

EditTextの背景が暗い色に変わりましたが、クリックするとキーボードがポップアップしてテキストを変更できます。

EditTextを無効にするには何を設定すればよいですか?


2
ビューのスタイルとスクロール動作の両方を保持することが可能です。EditTextこのプロパティを保持しながらしばらく無効にするにはUI.setReadOnly(myEditText, true)このライブラリから使用します。ライブラリなしでこの動作を再現する場合は、この小さなメソッドのソースコードを確認しください。
2015年

回答:


245

正しい設定だと思いますandroid:editable="false"

そして、なぜ私のリンクがの属性を指すのか疑問に思うTextViewなら、答えは次のようにEditText継承されるためですTextView

EditTextは、それ自体を編集可能に構成するTextViewの薄いベニアです。

更新:
以下のコメントで述べられているように、editable非推奨です(APIレベル3以降)。代わりにinputType(値とともにnone)使用する必要があります。


Nailujに感謝します。残念ながら、うまくいきませんでした。提案キーボードを追加すると、ポップアップが表示され、テキストを変更できます。
Hesam

17
android:editableは非推奨です。代わりにandroid:inputType = "none"を使用する必要がありますが、バグが含まれているため機能しません。:私たちはすべてここでの問題を主演場合、それはいいだろうcode.google.com/p/android/issues/detail?id=2854
ヴィクトルBrešan

85
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
漸近線2012年

28
android:editable="false" android:focusable="false"私にとってはうまく機能します(廃止予定を忘れて、android:editableはandroid:inputTypeとは何の関係もないと思います)
Muhammad Babar

8
android:inputType = "none"が機能しないすべての人のために、次を試してください:android:focusable = "false"を指定したandroid:inputType = "none"
Surendra Kumar

161

EditText.setFocusable(false) 編集を無効にして編集
EditText.setFocusableInTouchMode(true)を有効にするために使用します。


これは機能しますが、ビューは編集可能であるように見えますが、編集できないので、お勧めできません。ビューにはカスタムの背景があり、+ 1だったのでうまくいきました。
カネダ2012

4
@カネダ。私は実際にこれを好みます。ボックスがグレー表示になりたくありません。:)
Doomsknight

1
Android 4.4では、このオプションは元のテキストの色を維持します。を使用editText.setEnabled(false);すると、テキストの色が灰色に変わります。ただし、スピナーはの使用時にテキストの色を変更しないsetEnabledため、一貫性のないエクスペリエンスになります。
tbraun 2014

なんでsetFocusable(true)?違いは、このリンクを参照setFocusable()してsetFocusableInTouchMode()stackoverflow.com/questions/23799064/...
kenju

これは本当に私のニーズに合いました。内部にEditTextを含む複合カスタムビューを作成しました。私のカスタムビューを、クリックを受け入れるだけで編集できないようにすると、日付の選択ダイアログが起動するので問題があります。このソリューションは、onClickListenersを無効にしないため機能します
Neon Warge

64

次の方法を試すことができます:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

EditTextを有効化:

EditTextを有効化

無効なEditText:

無効なEditText

それは私のために働き、それがあなたを助けることを願っています。


1
これはTextViewのように見えます。これは驚くべきことです。これは私が探しているものです。
Yunus 2017

4
誰かがバックを有効にすることで同じ問題を抱えている場合-のeditText.setFocusableInTouchMode(true)代わりに呼び出す必要がありeditText.setFocusable(true)ます。
Dart Dega 2018年

61

これを使用してユーザー入力を無効にします

android:focusable="false"

android:editable = "false"このメソッドは廃止されました。


1
これは受け入れられる答えになるはずです。他の回答で提案されているように入力タイプを「なし」に設定しても、(常に)機能しません。「false」に設定を有効にすると、編集ができなくなりますが、テキストが薄暗くなり、望ましくない場合があります。
ジェリー2017

36

編集を無効にするにはEditTextfocusable OR を使用できると思いますenableが、

  1. 使用する android:enabled=...またはするeditText.setEnabled(...)

    また、テキストの色を灰色に変更しますEditText
    クリックしても効果がない

  2. android:focusable=...またはを使用するeditText.setFocusable(false) -のeditText.setFocusableInTouchMode(true)

    それは変更されませんのテキストの色EditText
    、それが強調表示されますクリックするとEditText、数ミリ秒程度のために一番下の行を

出力

ここに画像の説明を入力してください


19

以下のようandroid:editable="false"であるdepricated.YouはInputType使用することができますTYPE_NULLをのEditTextに

このように使用してください:

editText.setInputType(InputType.TYPE_NULL);

1
フィールドのonClickListenerを無効にしないため、この回答が気に入りました。
過酷なガナトラ2017年

inputTypeがパスワードの場合はどうしますか?TYPE_NULLはパスワードを表示します。
ilyamuromets

17

android:editable="false"非推奨としてxml

使い方android:enabled="false"は簡単です。なぜもっと多くのコードを使うのですか?

あなたが望むならあなたjava classはこれをプログラム的に使うこともできます

 editText.setEnabled(false);

有効にするにはandroid:enabled = "true"を使用します
android_jain 2018年


5

クラスの以下のプロパティを設定します。

editText.setFocusable(false);
editText.setEnabled(false);

必要に応じてスムーズに動作します。


だけenabledで十分であった
ateebahmed

5

EditTextの機能を無効にするには、次を使用します。

EditText.setInputType(InputType.TYPE_NULL);

何らかの方法で有効にしたい場合は、以下を使用できます。

EditText.setInputType(InputType.TYPE_CLASS_TEXT);

inputTypeがパスワードの場合はどうしますか?TYPE_NULLはパスワードを表示します。
ilyamuromets

4

を使用する場合android:editable="false"、eclipseは「android:editable is deprecated:Use inputType」というメッセージを思い出させます。

android:focusable="false"代わりに、私は代わりに使用しました。


4
android:editable="false"

現在は非推奨であり、

 YourEditText.setInputType(InputType.TYPE_NULL);

inputTypeがパスワードの場合はどうしますか?TYPE_NULLはパスワードを表示します。
ilyamuromets

@ilyamurometsこの回答は、stackoverflow.com / a / 16720520/7704650 with TYPE_TEXT_VARIATION_PASSWORDfollow this for more developer.android.com/reference/android/text/InputType
emkarachchi

ソフトキーボードが開かれていて、ユーザーがテキストを入力しようとしている間、EditTextへの入力を無効にしたいのですが。InputType.TYPE_NULLは、false値のisFocusableおよびisFocusableInTouchModeで適切に機能します。ただし、入力フィールドのinputTypeがtextPasswordの場合、InputType.TYPE_NULLはパスワード値を表示します。InputType.TYPE_NULL |を設定した場合 InputType.TYPE_TEXT_VARIATION_PASSWORDの場合、パスワードも表示され、ユーザーがテキストを入力する可能性があります。
ilyamuromets


3

無効= FOCUS + CLICK + CURSOR

フォーカス、クリック、およびカーソルの可視性を無効にすることが私にとってはうまくいきます。

これがXMLのコードです

<EditText
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:cursorVisible="false"
    android:clickable="false"
    />

2

これはあなたのEditTextが行います無効

editText.setEnabled(false);

そしてこれを使うことによって

editText.setInputType(InputType.TYPE_NULL);

Edittextにソフトキーボードが表示されないようにするだけですが、物理キーボードに接続されている場合は入力できます。


inputTypeがパスワードの場合はどうしますか?TYPE_NULLはパスワードを表示します。
ilyamuromets

2

私は新しくリリースされたマテリアルデザインライブラリを使用しています。私の場合、android:focusable = "false"とandroid:cursorVisible = "false"を使用すると機能します

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/to_time_input_layout"
                    app:endIconMode="custom"
                    app:endIconDrawable="@drawable/ic_clock"
                    app:endIconContentDescription="ToTime"
                    app:endIconTint="@color/colorAccent"
                    style="@style/OutlinedEditTextStyle"
                    android:hint="To Time">

                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/to_time_edit_text"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:focusable="false"
                        android:cursorVisible="false" />

</com.google.android.material.textfield.TextInputLayout>

1

私の場合、私がいEditTextなければテキストをスクロールする必要がありました。maxLines無効にすると、ライン数が超過します。この実装は私にとって完璧に機能しました。

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}

1

これを試してください、私にとってはうまくいきます:

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

注:this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); アクティビティを追加する必要があります。追加しないkeyboardと、最初にポップアップ表示されます。


1

いくつかの回答で言及されているように、editTextを無効にすると灰色になり、focusableをfalseに設定するとカーソルが表示されます。

あなたがxmlでのみそれをしたいのであれば、これはトリックをしました

       <YourFloatLabel
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

            <EditText
                android:id="@+id/view_ads_search_select"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="true"
                android:clickable="true"/>  
       </YourFloatLabel>

EditLayoutの上に表示されるFrameLayoutを追加し、それをフォーカス可能およびクリック可能に設定して、editTextがクリックできないようにします。


0

これは私にとってはうまくいきます:

android:focusable = "false"


2
これは、Sampath Kumarが4年前に投稿したものとどう違うのですか?
gobrewers14 2017年

0

受け入れられた回答に関する@Asymptoteのコメントから、以下を使用します。

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

...そしてボブはあなたの叔父です。


0

今日も使用していますがeditable="false"、でも使用していfocusable="false"ます。

EditTextを編集不可にする必要があるのは、EditTextスタイル(その下線、ヒントなど)を保持したいためですが、テキストではなく他の入力を受け入れます。たとえば、ドロップダウンリスト。

このようなユースケースでは、EditTextクリック可能にする必要があります(したがってenabled="false"適切ではありません)。設定focusable="false"でこのトリックを実行しますが、EditTextを長押しして、自分のテキストをクリップボードから貼り付けることができます。コードと処理によっては、アプリがクラッシュする可能性もあります。

だから私も使用しeditable="false"、今では警告を除いてすべてが素晴らしいです。


0

あなたは使うことができます android:focusable="false"が、カーソルを無効にする必要もあります。そうしないと、コピー/貼り付け機能は引き続き機能します。

だから、使う

android:focusable="false"
android:cursorVisible="false"

0

障害者の複数のレベルを達成する方法が複数ありました。

  • editText.setShowSoftInputOnFocus(false); そして editText.setFocusable

EditTextキーボードを表示しないようにします-テキストの書き込み。しかし、カーソルはまだ表示されており、ユーザーはテキストを貼り付けることができます。

  • editText.setCursorVisible(false)

カーソルを非表示にします。なぜそんなことをしたいのかわからない。ユーザーはテキストを入力して貼り付けることができます。

  • editText.setKeyListener(null)

この方法が最も便利です。ユーザーがテキストを入力する方法はありませんがOnClickListener、ユーザーがタッチしたときにアクションをトリガーする場合、ウィジェットは引き続き機能します

  • editText.setEnabled(false);

完全に無効にしますEditText。これは、ユーザーが(たとえば)入力しない任意のそれのテキストとは可能、文字通り「読み取り専用」でOnClickListener ないことで仕事を。

TextEditのドキュメント


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.