EditText
XML을 통해 편집 할 수 없는 방법을 알려주는 사람이 있습니까? 에 설정 android:editable
을 시도 false
했지만
- 더 이상 사용되지 않습니다. 과
- 작동하지 않았다.
EditText
XML을 통해 편집 할 수 없는 방법을 알려주는 사람이 있습니까? 에 설정 android:editable
을 시도 false
했지만
답변:
이 간단한 코드를 사용하십시오 :
textView.setKeyListener(null);
효과가있다.
편집 : KeyListener
나중에 추가하려면 다음을 수행하십시오.
1 : 키 리스너를 태그로 설정 textView
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2 : 태그에서 키 리스너를 가져 와서 다시 설정하십시오. textView
textView.setKeyListener((KeyListener) textView.getTag());
setFocusable()
doc이 기본 구현이 변경되면 변경 될 수 있다고 말했기 때문에 KeyListener에 필요한 기본값을 변경합니다.
이것을 EditText xml 파일에 추가하십시오 :
<EditText ...
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false">
</EditText>
와 같은 효과를 android:editable="false"
냅니다. 나를 위해 일했습니다, 그것이 당신에게도 효과가 있기를 바랍니다.
TextInputLayout
편집 텍스트를 보자
EditText editText;
editText.setKeyListener(null);
작동하지만 키를 듣지 않습니다.
사용자는 편집 텍스트에서 커서를 볼 수 있습니다.
당신은 시도 할 수 있습니다 editText.setEnabled(false);
이는 사용자가 커서를 볼 수 없음을 의미합니다. 간단히 말해서 TextView
.
다른 답변에서 언급했듯이 할 수는 setEnabled(false)
있지만 XML을 통해 설정하는 방법을 묻는 이유는 다음과 같습니다.
에 다음 속성을 추가하십시오 EditText
.
android:enabled="false"
enabled
는 더 이상 사용되지 않습니다. editable
입니다.
그들은 "편집 가능"을 더 이상 사용하지 않지만 inputType에서 작동하는 것을 제공하지 않았습니다.
그런데 inputType = "none"은 어떤 영향을 미칩니 까? 내가 사용하는 한 그것을 사용하거나 사용하지 않으면 아무런 차이가 없습니다.
예를 들어, 기본 editText는 한 줄이라고합니다. 그러나 inputType을 한 줄로 선택해야합니다. "없음"을 선택하면 여전히 여러 줄로 표시됩니다.
이 조합은 저에게 효과적이었습니다.
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
당신이 언급 한대로 android : editable은 더 이상 사용되지 않습니다. 대신 android : inputType = "none"을 사용해야하지만 버그로 인해 작동하지 않습니다 ( https://code.google.com/p/android/issues/detail?id=2854 )
그러나 포커스 가능을 사용하여 동일한 것을 달성 할 수 있습니다.
XML을 통해 :
<EditText ...
android:focusable="false"
</EditText>
코드에서 :
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
<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);
활동이 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>
사용할 수는 android:editable="false"
있지만 setEnabled(false)
컨트롤을 편집 할 수 없다는 시각적 힌트를 사용자에게 제공하므로 사용 하는 것이 좋습니다. 비활성화 된 모든 위젯에서 동일한 시각적 큐를 사용하며 일관성이 우수합니다.
나는 다음을 시도했다.
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();
}
});
친애하는,
댓글 환영합니다
존 고체
EditText.setFocusable(false)
편집하려면 다시 사용 하고 true로 설정하십시오.
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" />
나는 이것을 대화 상자로 해결합니다.
AlertDialog dialog;
EditText _editID;
TextView _txtID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
_txtID = (TextView) findViewById(R.id._txtID);
dialog = new AlertDialog.Builder(this).create();
_editID = new EditText(this);
_editID.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);
dialog.setTitle("Numero do Registro:");
dialog.setView(_editID);
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "IR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
_txtID.setText(_editID.getText());
toId(Integer.parseInt((_editID.getText().toString())));
}
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCELAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
_txtID.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_txtID.setText("_editID.getText()");
//_editID.setText("");
dialog.show();
}
});
이 코드를 사용해보십시오. 내 프로젝트에서 작동하므로 프로젝트에서 작동합니다.
android:editable="false"