EditText
をXMLで編集できないようにする方法を教えてもらえますか? Android:editable
をfalse
に設定しようとしましたが、
この単純なコードを使用してください。
textView.setKeyListener(null);
できます。
編集:KeyListener
を後で追加するには、次のようにします
1:キーリスナーをtextView
のタグに設定します
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2:タグからキーリスナーを取得してtextView
に戻す
textView.setKeyListener((KeyListener) textView.getTag());
これをあなたのEditText xmlファイルに追加してください:
<EditText ...
Android:clickable="false"
Android:cursorVisible="false"
Android:focusable="false"
Android:focusableInTouchMode="false">
</EditText>
Android:editable="false"
と同じ効果があります。私のために働いた、それもあなたのために働くことを願っています。
あなたのエディットテキストを
EditText editText;
editText.setKeyListener(null);
動作しますが、キーを聞いていないだけです。
ユーザーはedittext上にカーソルを見ることができます。
あなたはeditText.setEnabled(false);
を試すことができます
つまり、ユーザーはカーソルを見ることができません。簡単に言うとそれはTextView
になります。
他の答えで述べたように、あなたはsetEnabled(false)
をすることができますが、あなたはXMLを通してそれを設定する方法を尋ねているので、ここにそれを行う方法があります。
次の属性をEditText
に追加します。
Android:enabled="false"
xMLから無効にする(1行):
Android:focusable="false"
必要に応じて、Javaから再度有効にします(これも1行になります)。
editText.setFocusableInTouchMode(true);
彼らは「編集可能」を非推奨にしましたが、inputTypeでそれに対応するものを提供しませんでした。
ところで、inputType = "none"は効果がありますか?それを使っても使わなくても私の知る限りでは何の違いもありません。
たとえば、デフォルトのeditTextは単一行と言われています。しかし、あなたはそれが単一行であるためにinputTypeを選択しなければなりません。そして、 "none"を選択しても、それはまだ複数行です。
あなたがAndroidを言ったように:editableは非推奨です。 Android:inputType = "none"を代わりに使用する必要がありますが、バグのため機能しません( https://code.google.com/p/Android/issues/detail?id= 2854 )
しかし、focusableを使っても同じことができます。
XMLを介して:
<EditText ...
Android:focusable="false"
</EditText>
コードから:
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
クリックしたいが編集したくない場合は、次の手順を試してください。
Android:focusable="false"
この組み合わせは私のために働いた:
<EditText ... >
Android:longClickable="false"
Android:cursorVisible="false"
Android:focusableInTouchMode="false"
</EditText>
<EditText
Android:id="@+id/txtDate"
Android:layout_width="140dp"
Android:layout_height="wrap_content"
Android:layout_marginLeft="5dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="2dp"
Android:clickable="false"
Android:cursorVisible="false"
Android:gravity="center" />
そして以下を使用します。
txtDate.setKeyListener(null);
Android:enabled="false"
を使うだけです。これはまたEditText
に外観を与え、それは編集不可能に見えます。
Javaコードでこれを実行したい場合は、この行を使用して無効にしてください。
editText.setEnabled(false);
これを可能にするために:
editText.setEnabled(true);
私がやろうとした:
textView.setInputType( InputType.TYPE_NULL );
これはうまくいくはずですが、私にはうまくいきませんでした。
私はこのコードで終わりました:
textView.setKeyListener(new NumberKeyListener() {
public int getInputType() {
return InputType.TYPE_NULL;
}
protected char[] getAcceptedChars() {
return new char[] {};
}
});
これは完璧に機能します。
Android:editable="false"
を使用することもできますが、setEnabled(false)
を使用することをお勧めします。これは、コントロールを編集できないという視覚的な手がかりをユーザーに提供するためです。すべての無効化されたウィジェットで同じ視覚的な合図が使用され、一貫性が良好です。
EditTextにフォーカスを置かず、クリックしてもキーボードが表示されないようにしたい場合は、これが役に立ちました。
メインレイアウトに属性を追加する
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"
そしてEditTextフィールド
Android:focusable="false"
Android:focusableInTouchMode="false"
これが一例です。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/activity_home"
Android:background="@drawable/bg_landing"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="0dp"
Android:paddingLeft="0dp"
Android:paddingRight="0dp"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"
tools:context="com.woppi.woppi.samplelapp.HomeActivity">
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@null"
Android:inputType="textPersonName"
Android:ems="10"
Android:id="@+id/fromEditText"
Android:layout_weight="1"
Android:hint="@string/placeholder_choose_language"
Android:textColor="@Android:color/white"
Android:textColorHint="@Android:color/darker_gray"
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:onClick="onSelectFromLanguage" />
</RelativeLayout>
これを試して :
Android:inputType="none"
Android:focusable="false"
Android:clickable="false"
Android:longClickable="false"
「longClickable」属性は、「貼り付け」または「すべて選択」オプションがツールチップとして表示される原因となる長押し操作を無効にします。
この方法で仕事ができました。選択してクリップボードにコピーできますが、変更したり貼り付けたりすることはできません。
Android:enable="true"
Android:textIsSelectable="true"
Android:inputType="none"
私は以下を試しました:
codeEditText.setInputType(InputType.TYPE_NULL);
this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
pickCode();
}
}
});
this.codeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickCode();
}
});
しかし、問題は、編集テキストがフォームの最初のテキストである場合、それがフォーカスを取得し、新しいアクティビティを起動するpickCode()コードがすぐに呼び出されることです。それで、私は次のようにコードを修正しました、そして、それはかなりうまくいくようです(私がテキスト編集に焦点を合わせることができないけれども、私がする必要がないことを除いて):
itemCodeEditText.setFocusable(false);
this.itemCodeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickItem();
}
});
宜しくお願いします、
コメント歓迎
ジョンゴチェ
編集したい場合はEditText.setFocusable(false)
を使用し、再度trueに設定します。
@mahe madiに加えて、あなたもこれを試すことができます
editText.setEnabled(false);
editor.setTextColor(Color.BLACK);
このメソッドはカーソルを隠し、フォーカスを失い、さらに重要なことにTextViewのようにテキストの色を黒に設定します。
そして、EditTextに戻るには、単にEditTextのすべてのプロパティを取得するためにこれを実行します。
editText.setEnabled(true);
それが役に立てば幸い :)
Android:editableは推奨されないため、代わりにinputTypeを使用してください。
<EditText
Android:id="@+id/editText_x"
Android:layout_width="0dp"
Android:layout_height="fill_parent"
Android:layout_weight="70"
Android:inputType="none"
Android:hint="@string/enter_x" />
同じ問題に直面しましたが、観察の結果、Android:editable="false"
はEdittextでinputtype(Android:inputType="ANY_VALUE"
)がでないの場合にのみ機能することがわかりました。
EditTextからinputTypeを削除してeditable = falseを使ってください。