2017-08-29 3 views
0

編集テキストをreadOnlyまたは編集可能に設定することに関して多くの質問がありましたが、すべてが特定のシナリオでのみ機能します。 私は次の機能が必要です:編集テキストを読み取り専用に設定して編集可能に戻す

編集可能なEdittextウィジェットは、プログラムでは読み取り専用に設定する必要があります。読み込み専用の場合、データを入力することはできませんが、現在のコンテンツは選択してコピーする必要があります。同じフィールドは以前と同じ状態に編集可能に戻す必要があります。そのため、入力を許可し、コピー/貼り付けのテキストを選択します。

これは私の現在のコードです:

 if (readOnly) 
     { 
      _text.setTextColor(Color.GRAY); 
      _keyListener = _text.getKeyListener(); 
      _text.setKeyListener(null); 
     } 
     else 
     { 
      _text.setTextColor(_foreground); 
      if (_keyListener != null) 
      { 
       _text.setKeyListener(_keyListener); 
      } 
      _text.setFocusable(true); 
     } 

は、私はすでに、次の方法を試してみました:読み取り専用部分で

  • コールsetTextIsSelectable()。これにより、readonlyフィールドのテキストを選択することができます。しかし、編集可能に戻すと、フィールドは選択可能なままです。
  • 読み取り専用の場合はinputtypeをnullに設定し、以前の状態に戻して編集可能に設定します。これで、フィールドを編集可能に戻した後でフィールドを編集することはできません。

私は何らかのリスナーやプロパティを設定するのを忘れたと思います。たぶんあなたの誰かがそれを知っているかもしれません。

編集: Disabling of EditText in android しかし、それだけで限り、私は読み取り専用テキスト選択をするためにsetTextIsSelectable()を使用しませんように動作します は、次のことをしようとしました。この値を設定して編集可能に戻した場合、フィールドは選択可能ですが編集可能ではありません。

おかげ

+0

役立つ可能性が重複しているboolean disabled

希望を定義することを忘れないでください使用アンドロイドでEditTextを無効にする(https://stackoverflow.com/questions/4297763/disabling-of-edittext-in-android) –

+0

残念ながら、私の編集を参照してください。 – Roman

+1

他に何も動いていなければ、2つの異なるウィジェットを試して、関連するものだけを表示することができます。編集可能な状態でTextViewを表示し、編集可能な状態ではEditTextを表示し、TextWatchersを使用して隠れている間にTextWatchersを同期させます。 – cwbowron

答えて

2

使用これは、あなたが最初に使用するのアンドロイドで、何かのカスタムを試すことができますいけない仕事である場合、これはandroid:textIsSelectable="true"android:inputType="none"android:editableが推奨されません)

またはプログラム

editText.setInputType(InputType.TYPE_NULL);editText.setTextIsSelectable(true);

パラメータ:textIsSelectable = "true" in your xml, after define two methods

private void disableEditText() { 
     editText.setInputType(InputType.TYPE_NULL); 
     disabled = true; 
} 
private void enableEditText() { 
     editText.setInputType(InputType.TYPE_CLASS_TEXT); 
     disabled = false; 
} 

とオープンキーボードテキストがあるたびにも無効とeditText

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean b) { 
      if (!disabled) { 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 
      } 
     } 
    }); 

にクリックして、これはあなた

+0

残念ながら、これは機能しません。私はこれでフィールドを無効にすることができますが、私はそれを再び有効にする方法を知らない。 – Roman

+0

私は自分の答えを編集してください! –

+0

これはほとんどそれです。私は2つの変更を加えました:onClickListenerの代わりにonFocusListenerを使用すると、同じフィールドを2回クリックしてキーボードを開く必要がなくなります。 2番目の変更:imm.showSoftInput(editText、InputMethodManager.SHOW_FORCED)を使用します。 imm.toggleSoftInput()の代わりに、別のフィールドをクリックしてキーボードを閉じるのを防ぎます。あなたはこれらの変更を行うことができます、私は受け入れられた答えとしてこの答えを設定することができます。 – Roman

関連する問題