web-dev-qa-db-ja.com

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

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

編集可能にしたくない(キーボードが表示されたり、ヒントを変更したりできない)

実際には、編集テキストを単にヒント付きの画像として使用したい(これは変更できない)。実際の方法はImageViewと1つのTextViewを使用することでしたが、2つではなく1つのビューのみを使用するため、EditTextで試してほしい。また、すべてが動的であるため、XMLはありません。

上記の要件の場合、XMLのソリューションはAndroid:editable="false"しかし、私はこれをJavaで使いたい。

しかし、

私が使用する場合:-

et.setEnabled(false);

または

 et.setKeyListener(null);

EditTextを編集不可にしますが、同時にクリック不可にします。

70
Aamir Shah

ここでのコツは:-

et.setFocusable(false);
et.setClickable(true);
138
Aamir Shah

Javaコードを休閑として使用してEditTextを設定できます:-

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

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

Android:editable="false" 
Android:inputType="none"  
18
abhi

これを使用できます。

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;
    }
});
7
ridoy

editableは非推奨です。 Android:inputTypeをxmlの設計ではnoneとして、コーディングでは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();
    }
});
6
Nirav Bhavsar

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

Android:editable="false"
Android:focusable="false"
Android:focusableInTouchMode="false"

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

4
savepopulation

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"/>
2
Kishore Reddy

たぶんあなたは試すことができます

editText.setEnabled(false);
1
默默磊OK

私にとっては、どの答えも完全に機能するソリューションにはなりませんでした。

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

ガイド(noobフレンドリー)、コード内のいくつかのコメントに注意してください。

EditTextDispatched.JavaというカスタムEditTextの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;
    }

}

XmlでEditTextDispatchedを参照します(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
Martin Pfeffer

私はこの質問がすでに答えられていることを知っていますが、ここでより最新の(すなわち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) {   }

はい、これはANKOです。これは、Android Projects。

0
SilSur