編集テキストを編集できないがJAVAでクリック可能にする方法


91

EditTextクリック可能にすることはできますが、編集することはできません。

編集可能にしたくない(キーボードが表示されたり、ヒントを変更したりできないようにする必要があります)

実は、編集テキストをヒント付きの画像として使用したいのです(変更できません)。私は、実際の方法が使用することでした知っているImageViewと1をTextView、私はそれがで試してみたいEditText私は、すべてのものが無いXMLとてもダイナミックでまた1つのビューのみの代わりに、2を使用していますので。

上記の要件の場合、XMLでの解決策はですandroid:editable="false"が、これをJavaで使用したいと思います。

だが、

私が使用する場合:-

et.setEnabled(false);

または

 et.setKeyListener(null);

それはEditText編集不可能になりますが、同時にそれは同様にクリック不可能になります。


設定はet.setClickable(true)どうですか?それはうまくいくかもしれません。
ハイン

すでに試しましたが、うまく
いき

1
多分...相対的なレイアウトを使用してのEditTextの上に空の矩形か何かを入れてみてください、とRECTのクリック可能なものを試してみてください
Wops

回答:


168

ここでの秘訣は:-

et.setFocusable(false);
et.setClickable(true);

5
ただし、任意のフィールドから値をコピーした場合は、ラングタップアンドペーストを押すことでその値を貼り付けることができます。削除方法のアイデア
Rishabh Agrawal 2016

11
@ANinJaロングクリック可能をfalseに設定できます。つまり、et.setLongClickable(false);
ルイス

うーん、クリック/ロングクリックでカーソルが奇妙な方法で強調表示されます...しかし、私にはこれ以上のアプローチはありません。:/
Martin Pfeffer 2017年

1
完璧!コピー/貼り付けも回避するために、et.setLongClickable(false)を追加する必要がある場合があります
thanhbinh84 2017

1
完璧です、あなたは医者ですか?
イマンマラシ

22

あなたはEditText休閑としてJavaコードを使用することによって設定することができます:-

edittext.setFocusable(false);
edittext.setClickable(true);

または、のXMLファイルで以下のコードを使用しますEditText

android:editable="false" 
android:inputType="none"  

22

editable推奨されません。xmlの設計でandroid:inputTypenoneとして、コーディングではInputType.TYPE_NULLとして使用できます。

XMLの設計

<android.support.v7.widget.AppCompatEditText
    android:id="@+id/edt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="false"
    android:inputType="none"
    android:text="EditText"/>

コーディング

edt.setClickable(true);
edt.setFocusable(false);
edt.setInputType(InputType.TYPE_NULL);

そして以下はのクリックイベントです edittext

edt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
    }
});

私にとって魅力のように働いた
KarimBibars19年

8

これを使用できます。

android:focusableInTouchMode="false"

edittextをxmlで編集できないようにするには、クリック可能なイベントの場合、setOnTouchListener()イベントを使用して同じことを行うことができます。

editText.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
                        //do your stuff here..
        return false;
    }
});

1
Android Oandroid:focusableInTouchMode="false"でも必要なようです(android:focusable="false"単独では機能しません)。少なくとも、DP2では。
xip 2017年

7

android:editable は非推奨ですが、以下のようにstgを実行できます。

android:editable="false"
android:focusable="false"
android:focusableInTouchMode="false"

ピッカーを使用してデータを設定する編集テキストには、上記のcadeを使用しました。これで入力レイアウトを使用できます。


7

Edittext このような編集を有効または無効にします

EditText edit = (EditText) findviewby(R.id.edittext);

Javaコードを介して

edit.setEnabled(false); //non editable
edit.setEnabled(true); //editable

xmlを介して

<EditText
    android:id="@+id/otp_mpin"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    android:focusable="false"/>

0

私にとって、どの答えも完全に機能する解決策にはなりませんでした。

私の修正のショーケースhttps://www.youtube.com/watch?v=oUA4Cuxfdqc

ガイド(初心者向け)、コード内のいくつかのコメントに注意してください。

カスタムのJavaクラスを作成しますEditTextと呼ばれるEditTextDispatched.java

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;

/**
 * @author Martin Pfeffer
 * @see <a href="https://celox.io">https://celox.io</a>
 */
public class EditTextDispatched extends android.support.v7.widget.AppCompatEditText {

    private static final String TAG = "DispatchingEditText";

    private boolean editable = true;

    public EditTextDispatched(Context context) {
        super(context);
    }

    public EditTextDispatched(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextDispatched(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    // get the current state
    public boolean isEditable() {
        return editable;
    }

    // set your desired behaviour
    public void setEditable(boolean editable) {
        this.editable = editable;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent motionEvent) {

        if (editable) {
            // default behaviour of an EditText
            super.dispatchTouchEvent(motionEvent);
            return true;
        }

        // achieve the click-behaviour of a TextView (it's cuztom)
        ((RelativeLayout) getParent()).onTouchEvent(motionEvent);
        return true;
    }

}

EditTextDispatchedxmlでを参照します(pgk-nameを変更する必要があります):

  <io.celox.brutus.EditTextDispatched
    android:id="@+id/row_field_value"
    style="@style/row_field_text_display"
    android:layout_alignParentBottom="true"
    android:text="@string/sample_field_value" />

呼び出す:

private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) {
    value.setEditable(editable);
    value.setEnabled(editable);
}


0

私はこの質問がすでに回答されていることを知っていますが、より最新の(つまり2018年の)回答を与えるために、要求された(つまり入力されていないまたは編集可能な)効果を達成するために使用する設定があります:

    val etUserLoc: EditText = themedEditText(R.style.Pale_Blue_Text_Bold_13) {
                id = R.id.et_comp_user_keys_var_user_location
                inputType = InputType.TYPE_NULL
                isClickable = true
                isFocusable = false
                textColor = resources.getColor(R.color.magenta)  // overrides the default theme color
                text = Editable.Factory.getInstance().newEditable(resources.getString(R.string.loc_swakopmund))
            }.lparams(width = matchConstraint, height = matchParent) {   }

はい、AndroidプロジェクトでXMLを使用しなくなったため、これはANKOです。'inputType'は、 'isEditable'の非推奨を処理します。


0

2020年の時点で、アクセシビリティも気にする場合は、et.setFocusable(false);キーボードナビゲーションを使用してEditTextに到達できなくなるため、設定を避ける必要があります。

これが私の解決策です:

Kotlin

editText.isFocusableInTouchMode = false

editText.isLongClickable = false //this will prevent copy and paste

editText.setOnClickListener {
   // handle the click
   // this will automatically make the edittext clickable = true
}

-1

あなたも行うことができandroid:inputMethod="@null"、あなたの中でEditText、それは、カーソルまたはキーボードを表示しませんし、その後、あなたが簡単にリスナーを設定してクリックを把握することができます。

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