답변:
나는 올바른 것이 설정 될 것이라고 믿는다 android:editable="false"
.
받는 내 링크 지점의 속성 이유를 궁금해한다면 TextView
, 당신은 대답이 때문에 EditText
상속에서 TextView
:
EditText는 TextView에 대한 얇은 비니어로 편집 가능하도록 자체 구성됩니다.
업데이트 :
아래 의견에서 언급했듯이 editable
( API 레벨 3 이후 ) 더 이상 사용되지 않습니다 . 대신 inputType
(값과 함께 none
) 를 사용해야합니다 .
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
나를 위해 잘 작동합니다 (더 이상 사용되지 않음, android : editable은 android : inputType과 관련이 없다고 생각합니다)
사용 EditText.setFocusable(false)
하지 않도록 설정 편집에
EditText.setFocusableInTouchMode(true)
편집 할 수 있도록;
editText.setEnabled(false);
하면 텍스트 색상이 회색으로 바뀝니다. 그러나 스피너는를 사용할 때 텍스트 색상을 변경하지 않으므로 setEnabled
일관성이없는 환경이됩니다.
setFocusable(true)
? 차이점이 링크 참조 setFocusable()
및 setFocusableInTouchMode()
: stackoverflow.com/questions/23799064/...
다음 방법을 시도해 볼 수 있습니다.
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
활성화 된 EditText :
비활성화 된 EditText :
그것은 나를 위해 일하고 그것이 당신을 도울 수 있기를 바랍니다.
editText.setFocusableInTouchMode(true)
대신 전화를 걸어야 editText.setFocusable(true)
합니다.
edit disable을 EditText
위해 focusable
OR 을 사용할 수 있다고 생각 enable
하지만
android:enabled=...
또는 사용editText.setEnabled(...)
또한 텍스트 색상 을 회색으로 변경 합니다 EditText
.
클릭하면 효과가 없습니다
android:focusable=...
또는 editText.setFocusable(false)
- 사용editText.setFocusableInTouchMode(true)
그것은 변경되지 않습니다 의 텍스트 컬러 EditText
가 강조 클릭하면을 EditText
몇 밀리 초 약에 대한 결론을
산출
android:longClickable="false"
와 함께 추가 android:focusable="false"
하여 임시 하이라이트를 제거 할 수 있습니다 . 또한 "모두 선택"팝업이 나타나지 않습니다.
으로는 android:editable="false"
depricated.You가 InputType 사용할 수 있습니다 TYPE_NULL을 글고 치기에
이처럼 사용하십시오 :
editText.setInputType(InputType.TYPE_NULL);
대로 android:editable="false"
에서 사용되지 않는xml
android:enabled="false"
간단하게 사용하십시오 . 왜 더 많은 코드를 사용합니까?
원하는 경우 java class
프로그래밍 방식으로 사용할 수도 있습니다
editText.setEnabled(false);
간단히:
editText.setEnabled(false);
클래스에서 아래 속성을 설정하십시오.
editText.setFocusable(false);
editText.setEnabled(false);
필요에 따라 원활하게 작동합니다.
enabled
충분했다
EditText의 기능을 비활성화하려면 다음을 사용하십시오.
EditText.setInputType(InputType.TYPE_NULL);
어떤 식 으로든 사용하려는 경우 다음을 사용할 수 있습니다.
EditText.setInputType(InputType.TYPE_CLASS_TEXT);
android:editable="false"
더 이상 사용되지 않으며 사용됩니다.
YourEditText.setInputType(InputType.TYPE_NULL);
TYPE_TEXT_VARIATION_PASSWORD
팔로우를이 이상 developer.android.com/reference/android/text/InputType
편집 텍스트가 비활성화 됩니다.
editText.setEnabled(false);
그리고 이것을 사용함으로써
editText.setInputType(InputType.TYPE_NULL);
편집 텍스트가 소프트 키보드 를 표시하지 않게 하지만 실제 키보드에 연결되어 있으면 입력 할 수 있습니다.
Google에서 새로 출시 한 Material Design Library를 사용합니다. 내 경우에는 android : focusable = "false"및 android : cursorVisible = "false"를 사용할 때 작동합니다.
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/to_time_input_layout"
app:endIconMode="custom"
app:endIconDrawable="@drawable/ic_clock"
app:endIconContentDescription="ToTime"
app:endIconTint="@color/colorAccent"
style="@style/OutlinedEditTextStyle"
android:hint="To Time">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/to_time_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false" />
</com.google.android.material.textfield.TextInputLayout>
필자의 경우 EditText
텍스트가 없으면 스크롤해야했습니다. maxLines
비활성화되면 줄 수가 초과 됩니다. 이 구현은 나를 위해 완벽하게 작동했습니다.
private void setIsChatEditTextEditable(boolean value)
{
if(value)
{
mEdittext.setCursorVisible(true);
mEdittext.setSelection(chat_edittext.length());
// use new EditText(getApplicationContext()).getKeyListener()) if required below
mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());
}
else
{
mEdittext.setCursorVisible(false);
mEdittext.setKeyListener(null);
}
}
이것을 사용해보십시오, 나를 위해 잘 작동합니다 :
public class CustomEdittext extends EditText {
Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onCheckIsTextEditor() {
// TODO Auto-generated method stub
return mIsTextEditor;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mIsTextEditor=false;
Boolean mOnTouchEvent=super.onTouchEvent(event);
mIsTextEditor=true;
return mOnTouchEvent;
} }
참고 : this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
활동 을 추가해야합니다. 그렇지 않으면 처음에 팝업 이 나타 keyboard
납니다 .
일부 답변에서 언급했듯이 editText를 비활성화하면 회색이되고 포커스를 false로 설정하면 커서가 표시됩니다.
XML로만하고 싶다면이 트릭을 수행하십시오.
<YourFloatLabel
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/view_ads_search_select"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"/>
</YourFloatLabel>
간단히 EditText 위에 FrameLayout을 표시하고 editText를 클릭 할 수 없도록 포커스 가능하고 클릭 가능하게 설정하십시오.
이것은 나를 위해 작동합니다 :
android : focusable = "false"
오늘은 여전히을 사용 editable="false"
하지만focusable="false"
.
EditText를 편집 할 수 없게 만들어야하는 경우는 EditText 스타일 (밑줄, 힌트 등)을 유지하려고하지만 텍스트 대신 다른 입력을 허용하기 때문입니다. 드롭 다운 목록을 예로들 수 있습니다.
이러한 사용 사례에서는 EditText
클릭 할 수 있어야합니다 (따라서 enabled="false"
적합하지 않음). focusable="false"
그러나이 트릭을 설정 하면 EditText를 오랫동안 잡고 클립 보드에서 자신의 텍스트를 붙여 넣을 수 있습니다. . 코드와 처리에 따라 앱이 중단 될 수도 있습니다.
그래서 나는 또한 사용 editable="false"
했고 이제 경고를 제외하고 모든 것이 훌륭합니다.
여러 수준의 장애인을 달성하는 방법은 여러 가지가 있습니다.
editText.setShowSoftInputOnFocus(false);
과 editText.setFocusable
EditText
일부 텍스트로 키보드를 표시 하지 못하도록합니다 . 그러나 커서는 여전히 표시되며 사용자는 일부 텍스트를 붙여 넣을 수 있습니다.
editText.setCursorVisible(false)
커서를 숨 깁니다. 왜 그렇게 하시겠습니까? 사용자는 텍스트를 입력하고 붙여 넣을 수 있습니다.
editText.setKeyListener(null)
이 방법이 가장 편리하다고 생각합니다. 사용자가 텍스트를 입력하는 방법은 없지만 사용자가 텍스트를 OnClickListener
터치 할 때 작업을 트리거하려는 경우 위젯이 계속 작동 합니다.
editText.setEnabled(false);
완전히 비활성화합니다 EditText
. 문자 그대로 '읽기 전용'이며 사용자는 텍스트를 입력 할 수 없으며 (예를 들어) OnClickListener
작동하지 않습니다 .
TextEdit 설명서
이것을 XML 코드에서 설정하면 작동합니다.
android : focusableInTouchMode = "false"
EditText
이 속성을 유지하면서 잠시 비활성화하려면 이 라이브러리UI.setReadOnly(myEditText, true)
에서 사용 하십시오 . 라이브러리없이이 동작을 복제하려면 이 작은 방법 의 소스 코드 를 확인하십시오 .