Как сделать редактируемый текст не редактируемым, а кликабельным на JAVA



можно сделать EditText кликабельный, но не редактируемый.



Я не хочу, чтобы он был редактируемым (ни клавиатура не должна подниматься, ни мы должны быть в состоянии изменить подсказку)



На самом деле я хочу использовать редактировать текст просто как изображение с подсказкой (которая не может быть изменена). Я знаю, что фактический способ был использовать ImageView и TextView, но я хочу попробовать с EditText потому что тогда я буду использовать только один вид вместо 2. Также все вещи динамичны, так что нет XML.



для вышеуказанного требования решение в XML является android:editable="false" но я хочу использовать это в Java.



а,



если я использую :-



et.setEnabled(false);


или



 et.setKeyListener(null);


это делает EditText не редактируется, но в то же время это делает его не кликабельным, а также.

661   10  

10 ответов:

хитрость тут :-

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

вы можете установить EditText С помощью java-кода как под паром : -

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

или с помощью кода ниже в XML-файле для EditText.

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

Вы можете использовать это..

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

android:editable является устаревшим, но вы можете сделать stg, как показано ниже:

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

я использовал cade выше для редактирования текстов, которые я использую сборщики для установки данных. Вы можете использовать макет ввода с этим.

edittext enable and disable for the edit like this


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

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

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

как editable - Это исключено. вы можете использовать android:inputType как нет в проектировании xml или как 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();
    }
});

для меня ни один из ответов не привел к полностью рабочему решению.

витрина моего исправления https://www.youtube.com/watch?v=oUA4Cuxfdqc

руководство (Noob-friendly), пожалуйста, обратите внимание на несколько комментариев в коде.

создать класс 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;
    }

}

ссылка EditTextDispatched в вашем xml (вам придется изменить 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);
}

может быть, вы можете попробовать

editText.setEnabled(false);

Я знаю, что на этот вопрос уже был дан ответ, но чтобы дать более актуальный (т. е. 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, так как я больше не использую XML в любом из моих проектов Android. 'InputType' заботится об' isEditable ' устаревании.

вы также можете сделать android:inputMethod="@null" в своем EditText и он не будет показывать курсор или клавиатуру, а затем вы можете легко понять щелчок через настройки слушателя.

Comments

    Ничего не найдено.