JAVA'da düzenleme metni nasıl düzenlenebilir değil tıklanabilir hale getirilir


91

EditTextTıklanabilir hale getirmek mümkün ama düzenlenebilir değil mi?

Düzenlenebilir olmasını istemiyorum (Ne klavye ortaya çıkmalı ne de ipucunu değiştirebilmeliyiz)

Aslında Metni Düzenle'yi ipucu içeren bir görüntü olarak kullanmak istiyorum (değiştirilemez). Asıl yolun ImageViewve bir kullanmak olduğunu biliyorum TextView, ama denemesini istiyorum EditTextçünkü o zaman 2 yerine sadece bir görünüm kullanacağım. Ayrıca her şey dinamik olduğundan XML yok.

Yukarıdaki gereksinim için XML'deki çözüm android:editable="false"ancak bunu Java'da kullanmak istiyorum.

Fakat,

Kullanırsam: -

et.setEnabled(false);

veya

 et.setKeyListener(null);

O yapar EditTextdeğil düzenlenebilir ama aynı zamanda onu o sigara tıklanabilir hale de.


Ayarlamaya ne dersin et.setClickable(true)? İşe yarayabilir.
Hein

zaten denedim .... ama işe yaramadı ... başka düşünceler
Aamir Shah

1
belki göreli düzeni kullanmayı ve edittext'in ÜZERİNDE boş bir dikdörtgen veya başka bir şey koymayı deneyebilir ve dikdörtgen üzerindeki tıklanabilir şeyi deneyebilirsiniz ..
Wops

Yanıtlar:


168

Buradaki hile: -

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

5
ancak herhangi bir alandan bir değer kopyaladıysanız, lang dokunup yapıştır düğmesine basarak bu değeri yapıştırabilirsiniz .. nasıl kaldırılacağı hakkında herhangi bir fikir
Rishabh Agrawal

11
@ANinJa uzun tıklanabilirliği false olarak ayarlayabilirsiniz, yani et.setLongClickable (false);
Luis

Hmm, tıklama / uzun tıklama işleminde imleç garip bir şekilde vurgulanıyor ... Ama daha iyi bir yaklaşımım yok. : /
Martin Pfeffer

1
Mükemmel! siz de yapıştırmak / önlemek kopyasına et.setLongClickable (yanlış) eklemeniz gerekebilir
thanhbinh84

1
Mükemmel, Doktor musunuz?
Iman Marashi

22

EditTextaşağıdaki gibi java kodunu kullanarak ayarlayabilirsiniz : -

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

veya XML dosyasında aşağıdaki kodu kullanarak EditText.

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

22

Kullanımdan editablekaldırıldığı gibi. Kullanabileceğiniz android:inputTypeolarak hiçbiri tasarımı xml veya InputType.TYPE_NULL kodlama içinde.

XML Tasarlama

<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"/>

Kodlama

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

Ve aşağıda tıklama olayı var edittext

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

Benim için bir cazibe gibi çalıştı
Karim Bibars

8

Bunu kullanabilirsiniz ..

android:focusableInTouchMode="false"

edittext'i xml'de düzenlenemez hale getirmek için. tıklanabilir olay için setOnTouchListener () olayını kullanarak aynı şeyi yapabilirsiniz ..

editText.setOnTouchListener(new OnTouchListener() {

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

1
Görünüşe göre Android O'da android:focusableInTouchMode="false"da gerekli ( android:focusable="false"tek başına çalışmıyor). En azından DP2'de.
xip

7

android:editable kullanımdan kaldırıldı ancak aşağıdaki gibi stg yapabilirsiniz:

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

Verileri ayarlamak için seçicileri kullandığım edittexts için yukarıdaki cade'i kullandım. Bununla giriş düzenini kullanabilirsiniz.


7

Edittext bunun gibi düzenleme için etkinleştirin ve devre dışı bırakın

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

Java kodu aracılığıyla

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

Xml aracılığıyla

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

0

Benim için cevapların hiçbiri tamamen çalışan bir çözümle sonuçlanmadı.

Düzeltmemin vitrini https://www.youtube.com/watch?v=oUA4Cuxfdqc

Kılavuz (çaylak dostu) , lütfen koddaki birkaç yoruma dikkat edin.

EditTextDispatched.javaEditText adlı özel bir Java sınıfı oluşturun

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'nizdeki 'ye referans verin (pgk-adını değiştirmeniz gerekecektir):

  <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" />

Çağırmak için:

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


0

Bu sorunun zaten yanıtlandığını biliyorum, ancak daha güncel (ör. 2018) bir yanıt vermek için burada istenen (yani, girilmemiş veya düzenlenebilir) etkiyi elde etmek için kullandığım kurulum:

    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) {   }

Evet, Android Projelerimin hiçbirinde artık XML kullanmadığım için bu ANKO. 'İnputType', 'isEditable' kullanımdan kaldırılmasını sağlar.


0

2020 itibariyle, erişilebilirliği de önemsiyorsanız, Ayar et.setFocusable(false);Metni'ni Klavye gezintisi kullanılarak erişilemez hale getireceği için ayar yapmaktan kaçınmalısınız .

İşte benim çözümüm:

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

Ayrıca kendi android:inputMethod="@null"içinde de yapabilirsiniz EditTextve imleci veya klavyeyi göstermez ve daha sonra tıklama ayar dinleyicisini kolayca kavrayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.