web-dev-qa-db-ja.com

AndroidでXMLを介してEditTextを編集できないようにするにはどうすればいいですか?

EditTextをXMLで編集できないようにする方法を教えてもらえますか? Android:editablefalseに設定しようとしましたが、

  1. 非推奨です。そして
  2. うまくいきませんでした。
287

この単純なコードを使用してください。

textView.setKeyListener(null);

できます。

編集:KeyListenerを後で追加するには、次のようにします

1:キーリスナーをtextViewのタグに設定します

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

2:タグからキーリスナーを取得してtextViewに戻す

textView.setKeyListener((KeyListener) textView.getTag());
386

これをあなたのEditText xmlファイルに追加してください:

<EditText ...
        Android:clickable="false" 
        Android:cursorVisible="false" 
        Android:focusable="false" 
        Android:focusableInTouchMode="false">
</EditText>

Android:editable="false"と同じ効果があります。私のために働いた、それもあなたのために働くことを願っています。

377
GalDude33

あなたのエディットテキストを

EditText editText;

editText.setKeyListener(null);

動作しますが、キーを聞いていないだけです。

ユーザーはedittext上にカーソルを見ることができます。

あなたはeditText.setEnabled(false);を試すことができます

つまり、ユーザーはカーソルを見ることができません。簡単に言うとそれはTextViewになります。

54
mahe madhi

他の答えで述べたように、あなたはsetEnabled(false)をすることができますが、あなたはXMLを通してそれを設定する方法を尋ねているので、ここにそれを行う方法があります。

次の属性をEditTextに追加します。

Android:enabled="false"
26
vida

xMLから無効にする(1行):

 Android:focusable="false"

必要に応じて、Javaから再度有効にします(これも1行になります)。

editText.setFocusableInTouchMode(true);
24
kouretinho

彼らは「編集可能」を非推奨にしましたが、inputTypeでそれに対応するものを提供しませんでした。

ところで、inputType = "none"は効果がありますか?それを使っても使わなくても私の知る限りでは何の違いもありません。

たとえば、デフォルトのeditTextは単一行と言われています。しかし、あなたはそれが単一行であるためにinputTypeを選択しなければなりません。そして、 "none"を選択しても、それはまだ複数行です。

15
Timuçin

あなたが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);
13
Adorjan Princz

クリックしたいが編集したくない場合は、次の手順を試してください。

        Android:focusable="false"
12
Kai Wang

この組み合わせは私のために働いた:

<EditText ... >
    Android:longClickable="false"
    Android:cursorVisible="false"
    Android:focusableInTouchMode="false"
</EditText>
11
<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);
7
askimp

Android:enabled="false"を使うだけです。これはまたEditTextに外観を与え、それは編集不可能に見えます。

6
Shahid Sarwar

Javaコードでこれを実行したい場合は、この行を使用して無効にしてください。

editText.setEnabled(false);

これを可能にするために:

editText.setEnabled(true);
6
user3185897

私がやろうとした:

textView.setInputType( InputType.TYPE_NULL );

これはうまくいくはずですが、私にはうまくいきませんでした。

私はこのコードで終わりました:

textView.setKeyListener(new NumberKeyListener() {
    public int getInputType() {
        return InputType.TYPE_NULL;
    }

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});

これは完璧に機能します。

5
saric

Android:editable="false"を使用することもできますが、setEnabled(false)を使用することをお勧めします。これは、コントロールを編集できないという視覚的な手がかりをユーザーに提供するためです。すべての無効化されたウィジェットで同じ視覚的な合図が使用され、一貫性が良好です。

3
jclafuente

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>
3
Woppi

これを試して :

Android:inputType="none"
2
Rutvik
Android:focusable="false"

Android:clickable="false"

Android:longClickable="false"

「longClickable」属性は、「貼り付け」または「すべて選択」オプションがツールチップとして表示される原因となる長押し操作を無効にします。

2
Radhey

この方法で仕事ができました。選択してクリップボードにコピーできますが、変更したり貼り付けたりすることはできません。

Android:enable="true"
Android:textIsSelectable="true"
Android:inputType="none"
2
Leo

私は以下を試しました:

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();

  }

});

宜しくお願いします、

コメント歓迎

ジョンゴチェ

2
johngoche9999

編集したい場合はEditText.setFocusable(false)を使用し、再度trueに設定します。

2
nobjta_9x_tq

@mahe madiに加えて、あなたもこれを試すことができます

editText.setEnabled(false);
editor.setTextColor(Color.BLACK);

このメソッドはカーソルを隠し、フォーカスを失い、さらに重要なことにTextViewのようにテキストの色を黒に設定します。

そして、EditTextに戻るには、単にEditTextのすべてのプロパティを取得するためにこれを実行します。

editText.setEnabled(true);

それが役に立てば幸い :)

2
Superuser

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" />
1
M-Razavi

同じ問題に直面しましたが、観察の結果、Android:editable="false"はEdittextでinputtype(Android:inputType="ANY_VALUE")がでないの場合にのみ機能することがわかりました。

EditTextからinputTypeを削除してeditable = falseを使ってください。

1
shubomb