Android에서 텍스트 편집 비활성화
응용프로그램에서 사용자가 쓰기 권한이 아닌 읽기 권한만 가진 편집 텍스트가 있습니다.
내가 설정한 코드에서android:enabled="false"
.
텍스트 편집의 배경이 어두운 색으로 변경되었지만 이를 클릭하면 키보드가 나타나고 텍스트를 변경할 수 있습니다.
텍스트 편집을 비활성화하려면 무엇을 설정해야 합니까?
저는 세팅하는 것이 맞다고 생각합니다.
그리고 만약 당신이 내 링크가 왜 당신의 특성을 가리키는지 궁금하다면.TextView
당신의 대답은 다음으로부터 상속받기 때문입니다.TextView
:
EditText는 TextView보다 얇은 베니어로 편집 가능하도록 구성됩니다.
와 같이, 아댓글언바같이와된급에래,,editable
API 레벨 3 이후에는 더 이상 사용되지 않습니다.대신 사용해야 합니다(값 포함)해야 합니다.none
).
사용하다EditText.setFocusable(false)
을
EditText.setFocusableInTouchMode(true)
편집을 활성화합니다.
다음 방법을 사용할 수 있습니다.
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
텍스트 편집 사용:
텍스트 편집 사용 안 함:
그것은 나에게 효과가 있고 당신에게 도움이 되기를 바랍니다.
사용자 입력을 비활성화하는 데 사용합니다.
android:focusable="false"
Android:message="false" 이 방법은 사용되지 않습니다.
edit 편사 안함용집을 설정합니다.EditText
우리는 사용할 수 있을 것 같습니다.focusable
enable
그렇지만
용사를 합니다.
android:enabled=...
또는editText.setEnabled(...)
또한 텍스트 색상을 변경합니다.
EditText
.용사를 합니다.
android:focusable=...
또는editText.setFocusable(false)
-editText.setFocusableInTouchMode(true)
텍스트 색상은 변경되지 않습니다.
EditText
클릭하면 다음 항목이 강조 표시됩니다.EditText
몇 .
산출량
~하듯이android:editable="false"
더 이상 사용되지 않음xml
사용하다
android:enabled="false"
간단니다. 왜합니까?왜 더 많은 코드를 사용합니까?
당신이 참여하고 싶다면,java class
프로그램을 .
editText.setEnabled(false);
~하듯이android:editable="false"
감소했습니다.텍스트 편집에서 입력 유형 TYPE_NULL을 사용할 수 있습니다.
다음과 같이 사용:
editText.setInputType(InputType.TYPE_NULL);
단순:
editText.setEnabled(false);
저는 구글에서 새로 출시한 자재 디자인 라이브러리를 사용합니다.저의 경우 안드로이드를 사용할 때 작동합니다. "false" 및 안드로이드: 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.setInputType(InputType.TYPE_NULL);
활성화하려는 경우 다음을 사용할 수 있습니다.
EditText.setInputType(InputType.TYPE_CLASS_TEXT);
= FOCUS+CLICK+CURS 사용 안 함
포커스, 클릭 및 커서 가시성을 비활성화하면 유용합니다.
여기 XML의 코드가 있습니다.
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:clickable="false"
/>
클래스에서 아래 속성 설정:
editText.setFocusable(false);
editText.setEnabled(false);
당신이 요구한 대로 원활하게 작동할 것입니다.
이렇게 하면 텍스트 편집이 비활성화됩니다.
editText.setEnabled(false);
그리고 이것을 사용함으로써.
editText.setInputType(InputType.TYPE_NULL);
편집 텍스트에 소프트키보드가 표시되지 않지만 실제 키보드에 연결되어 있으면 입력할 수 있습니다.
을 android:editable="false"
이클립스는 다음 메시지를 표시합니다. "clipse:clipse는 더 이상 사용되지 않습니다.대신 inputType을 사용하십시오."
그래서 저는.android:focusable="false"
대신, 그것은 저에게 잘 작동했습니다.
android:editable="false"
이제는 더 이상 사용되지 않습니다.
YourEditText.setInputType(InputType.TYPE_NULL);
용사를 합니다.android:editable="false"
감됨산. 대사용합니다야를 사용해야 .android:focusable="false"
사용하다TextView
대신.
저 같은 경우에는 제가 필요했습니다.EditText
줄 수 초 할 텍 스 를 트 스 크 롤 경 우 과 가 ▁text ▁if ▁no ▁scroll ▁to ▁exceed 스 롤 크 ▁of ▁lines 를 줄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
처음에 팝업됩니다.
일부 답변에서 언급했듯이, 편집 텍스트를 비활성화하면 회색이 되고 포커스 가능한 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>
편집 텍스트 위에 프레임 레이아웃을 추가하고 편집 텍스트를 클릭할 수 없도록 포커스 및 클릭 가능으로 설정합니다.
이것은 나에게 도움이 됩니다.
Android:설정 가능="거짓"
승인된 답변에 대한 @Asimpot의 설명에서 다음을 사용합니다.
myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);
밥은 네 삼촌이고
오늘도 나는 여전히 사용합니다.editable="false"
뿐만 아니라 또한focusable="false"
.
EditText를 편집 불가능으로 만들어야 하는 경우는 EditText 스타일(그 밑줄, 힌트 등)을 유지하고 싶지만 텍스트 대신 다른 입력을 허용하기 때문이라고 생각합니다.예를 들어 드롭다운 목록입니다.
이러한 사용 사례에서, 우리는 다음과 같은 것을 가질 필요가 있습니다.EditText
( 가능)enabled="false"
적합하지 않음). 정focusable="false"
하지만 이 방법을 사용하면 편집 텍스트를 오래 유지하고 클립보드에서 텍스트를 붙여넣을 수 있습니다.코드와 처리 방법에 따라 앱이 손상될 수도 있습니다.
그래서 저도 사용했습니다.editable="false"
그리고 지금은 모든 것이 훌륭합니다. 경고만 빼고요.
사용할 수 있습니다.android:focusable="false"
또한 커서를 비활성화해야 합니다. 그렇지 않으면 복사/삭제 기능이 계속 작동합니다.
그래서, 사용합니다.
android:focusable="false"
android:cursorVisible="false"
여러 수준의 장애를 달성하는 방법에는 여러 가지 방법이 있습니다.
editText.setShowSoftInputOnFocus(false);
그리고.editText.setFocusable
합니다.EditText
키보드 표시 - 일부 텍스트에서 쓰기.그러나 커서는 여전히 표시되며 사용자는 일부 텍스트에 붙여넣을 수 있습니다.
editText.setCursorVisible(false)
커서를 숨깁니다.당신이 왜 그것을 하고 싶어하는지 잘 모르겠습니다.사용자는 텍스트를 입력하고 붙여넣을 수 있습니다.
editText.setKeyListener(null)
저는 이 방법이 가장 편리하다고 생각합니다.사용자가 텍스트를 입력할 수 있는 방법은 없지만 위젯은 여전히 사용할 수 있습니다.OnClickListener
했을 때 용자가터때작트리하려면거을업치할사▁if▁when면려▁you▁action하용거트▁want리▁it.
editText.setEnabled(false);
를 완전히 비활성화합니다.EditText
그대로 전용으로, 를 입력할 수 를 들어) 문그읽 '기이전용'므예로사용텍가자입수없를며력으할스트자대로예)▁it▁(:이없며수▁(으입▁literally-'▁is▁infor할▁':)OnClickListener
그것과 함께 작동하지 않습니다.
텍스트 문서 편집
코틀린에서 다음과 같은 확장 함수를 사용할 수 있습니다.
fun EditText.disableInput() {
isFocusable = false
isEnabled = false
isCursorVisible = false
keyListener = null
setBackgroundColor(Color.TRANSPARENT)
}
이와 같이:
myEditText.disableInput()
위의 답변은 토크백 모드와 같은 모든 경우에 실제로 적용되지 않습니다.
위에 추가 보기를 추가했습니다.EditText
클릭 청취자를 할당했습니다.
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent">
...
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
<View
android:id="@+id/btnTextInputLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="?selectableItemBackground"
app:layout_constraintBottom_toBottomOf="@+id/textInputLayout"
app:layout_constraintEnd_toEndOf="@+id/textInputLayout"
app:layout_constraintStart_toStartOf="@+id/textInputLayout"
app:layout_constraintTop_toTopOf="@+id/textInputLayout" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
도우미 기능:
private fun makeOverlayEditTextEditable(
editText: EditText,
clickOverlayView: View,
inputType: Int
) {
enableEditTextInput(editText, inputType)
clickOverlayView.isVisible = false
}
private fun makeOverlayEditTextClickable(
editText: EditText,
clickOverlayView: View,
clickListener: () -> Unit
) {
disableEditTextInput(editText)
clickOverlayView.setOnClickListener {
clickListener()
}
clickOverlayView.isVisible = true
}
@SuppressLint("ClickableViewAccessibility")
private fun disableEditTextInput(editText: EditText) {
editText.inputType = InputType.TYPE_NULL
editText.isFocusable = false
editText.isFocusableInTouchMode = false
editText.isClickable = false
editText.setOnTouchListener { _, _ -> true }
}
@SuppressLint("ClickableViewAccessibility")
private fun enableEditTextInput(editText: EditText, inputType: Int) {
editText.inputType = inputType
editText.isFocusable = true
editText.isFocusableInTouchMode = true
editText.isClickable = true
editText.setOnTouchListener(null)
}
용도:
// Make EditText editable
makeOverlayEditTextEditable(
editText = binding.textInputLayout,
clickOverlayView = binding.btnTextInputLayout,
inputType = InputType.TYPE_CLASS_TEXT
)
// Make EditText clickable
makeOverlayEditTextClickable(
editText = binding.textInputLayout,
clickOverlayView = binding.btnTextInputLayout,
) {
// Handle click
}
이 패턴이 응용프로그램 전체에서 사용되는 경우 사용자 정의 보기에서 이 논리를 추상화하는 것이 좋습니다.
XML 코드에 설정하면 작동합니다.
Android:FocusableInTouchMode="false"
언급URL : https://stackoverflow.com/questions/4297763/disabling-of-edittext-in-android
'programing' 카테고리의 다른 글
자동 완성 플러그인 결과를 사용자 지정하는 방법은 무엇입니까? (0) | 2023.08.04 |
---|---|
Node.js에서 버퍼를 읽기 가능한 스트림으로 변환 (0) | 2023.08.04 |
C에서 '0'을 빼면 문자가 나타내는 숫자가 되는 이유는 무엇입니까? (0) | 2023.08.04 |
jQuery에서 입력 파일이 비어 있는지 확인하는 방법 (0) | 2023.08.04 |
Oracle에서 오른쪽 괄호가 누락되었다고 생각하는 이유는 무엇입니까? (0) | 2023.08.04 |