回答:
正しい設定だと思いますandroid:editable="false"
。
そして、なぜ私のリンクがの属性を指すのか疑問に思うTextView
なら、答えは次のようにEditText
継承されるためですTextView
。
EditTextは、それ自体を編集可能に構成するTextViewの薄いベニアです。
更新:
以下のコメントで述べられているように、editable
非推奨です(APIレベル3以降)。代わりにinputType
(値とともにnone
)使用する必要があります。
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
私にとってはうまく機能します(廃止予定を忘れて、android:editableはandroid:inputTypeとは何の関係もないと思います)
EditText.setFocusable(false)
編集を無効にして編集
EditText.setFocusableInTouchMode(true)
を有効にするために使用します。
editText.setEnabled(false);
すると、テキストの色が灰色に変わります。ただし、スピナーはの使用時にテキストの色を変更しないsetEnabled
ため、一貫性のないエクスペリエンスになります。
setFocusable(true)
?違いは、このリンクを参照setFocusable()
してsetFocusableInTouchMode()
:stackoverflow.com/questions/23799064/...
次の方法を試すことができます:
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
EditTextを有効化:
無効なEditText:
それは私のために働き、それがあなたを助けることを願っています。
editText.setFocusableInTouchMode(true)
代わりに呼び出す必要がありeditText.setFocusable(true)
ます。
編集を無効にするにはEditText
、focusable
OR を使用できると思いますenable
が、
使用する android:enabled=...
またはするeditText.setEnabled(...)
また、テキストの色を灰色に変更しますEditText
。
クリックしても効果がない
android:focusable=...
またはを使用するeditText.setFocusable(false)
-のeditText.setFocusableInTouchMode(true)
それは変更されませんのテキストの色EditText
、それが強調表示されますクリックするとEditText
、数ミリ秒程度のために一番下の行を
出力
以下のようandroid:editable="false"
であるdepricated.YouはInputType使用することができますTYPE_NULLをのEditTextに
このように使用してください:
editText.setInputType(InputType.TYPE_NULL);
android:editable="false"
非推奨としてxml
使い方
android:enabled="false"
は簡単です。なぜもっと多くのコードを使うのですか?
あなたが望むならあなたjava class
はこれをプログラム的に使うこともできます
editText.setEnabled(false);
単に:
editText.setEnabled(false);
クラスの以下のプロパティを設定します。
editText.setFocusable(false);
editText.setEnabled(false);
必要に応じてスムーズに動作します。
enabled
で十分であった
EditTextの機能を無効にするには、次を使用します。
EditText.setInputType(InputType.TYPE_NULL);
何らかの方法で有効にしたい場合は、以下を使用できます。
EditText.setInputType(InputType.TYPE_CLASS_TEXT);
android:editable="false"
現在は非推奨であり、
YourEditText.setInputType(InputType.TYPE_NULL);
TYPE_TEXT_VARIATION_PASSWORD
follow this for more developer.android.com/reference/android/text/InputType
これはあなたのEditTextが行います無効。
editText.setEnabled(false);
そしてこれを使うことによって
editText.setInputType(InputType.TYPE_NULL);
Edittextにソフトキーボードが表示されないようにするだけですが、物理キーボードに接続されている場合は入力できます。
私は新しくリリースされたマテリアルデザインライブラリを使用しています。私の場合、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>
私の場合、私がい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);
}
}
これを試してください、私にとってはうまくいきます:
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
と、最初にポップアップが表示されます。
いくつかの回答で言及されているように、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がクリックできないようにします。
これは私にとってはうまくいきます:
android:focusable = "false"
今日も使用していますがeditable="false"
、でも使用していfocusable="false"
ます。
EditTextを編集不可にする必要があるのは、EditTextスタイル(その下線、ヒントなど)を保持したいためですが、テキストではなく他の入力を受け入れます。たとえば、ドロップダウンリスト。
このようなユースケースでは、EditText
クリック可能にする必要があります(したがってenabled="false"
適切ではありません)。設定focusable="false"
でこのトリックを実行しますが、EditTextを長押しして、自分のテキストをクリップボードから貼り付けることができます。コードと処理によっては、アプリがクラッシュする可能性もあります。
だから私も使用しeditable="false"
、今では警告を除いてすべてが素晴らしいです。
障害者の複数のレベルを達成する方法が複数ありました。
editText.setShowSoftInputOnFocus(false);
そして editText.setFocusable
がEditText
キーボードを表示しないようにします-テキストの書き込み。しかし、カーソルはまだ表示されており、ユーザーはテキストを貼り付けることができます。
editText.setCursorVisible(false)
カーソルを非表示にします。なぜそんなことをしたいのかわからない。ユーザーはテキストを入力して貼り付けることができます。
editText.setKeyListener(null)
この方法が最も便利です。ユーザーがテキストを入力する方法はありませんがOnClickListener
、ユーザーがタッチしたときにアクションをトリガーする場合、ウィジェットは引き続き機能します
editText.setEnabled(false);
完全に無効にしますEditText
。これは、ユーザーが(たとえば)入力しない任意のそれのテキストとは可能、文字通り「読み取り専用」でOnClickListener
ないことで仕事を。
TextEditのドキュメント
これをXMLコードに設定すると、機能します。
android:focusableInTouchMode = "false"
EditText
このプロパティを保持しながらしばらく無効にするにはUI.setReadOnly(myEditText, true)
、このライブラリから使用します。ライブラリなしでこの動作を再現する場合は、この小さなメソッドのソースコードを確認してください。