[android] 끝에 cross (x) 버튼으로 EditText를 만드는 방법은 무엇입니까?
EditText
크로스 버튼이 포함 된 위젯이 있습니까 , 아니면 EditText
자동으로 생성되는 속성 이 있습니까? 십자 버튼으로 작성된 텍스트를 삭제하고 싶습니다 EditText
.
답변
다음 레이아웃을 사용하십시오.
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:padding="5dp">
<EditText
android:id="@+id/calc_txt_Prise"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:layout_marginTop="20dp"
android:textSize="25dp"
android:textColor="@color/gray"
android:textStyle="bold"
android:hint="@string/calc_txt_Prise"
android:singleLine="true" />
<Button
android:id="@+id/calc_clear_txt_Prise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_gravity="right|center_vertical"
android:background="@drawable/delete" />
</FrameLayout>
버튼의 ID를 사용하고 onClickListener 메소드에서 원하는 작업을 수행 할 수도 있습니다.
답변
DroidParts 사용하는 경우 ClearableEditText 추가했습니다 .
다음 abs__ic_clear_holo_light
은 ActionBarSherlock 에서 사용자 정의 배경 및 명확한 아이콘으로 설정된 모습입니다 .
답변
Android 용 Material Design Components를 통한 2020 솔루션 :
Gradle 설정에 재료 구성 요소 추가 :
https://maven.google.com/ 에서 최신 버전을 찾으십시오.
implementation 'com.google.android.material:material:1.1.0'
또는 AndroidX 라이브러리 사용으로 업데이트하지 않은 경우 다음과 같이 추가 할 수 있습니다.
implementation 'com.android.support:design:28.0.0'
그때
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_text"
app:endIconMode="clear_text">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
: 지불에 대한 관심 응용 프로그램 : endIconMode = “clear_text”
여기에서 논의한 바와 같이 머티리얼 디자인 문서
답변
이것은 코 틀린 솔루션입니다. 이 도우미 메소드를 kotlin 파일에 넣으십시오.
fun EditText.setupClearButtonWithAction() {
addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(editable: Editable?) {
val clearIcon = if (editable?.isNotEmpty() == true) R.drawable.ic_clear else 0
setCompoundDrawablesWithIntrinsicBounds(0, 0, clearIcon, 0)
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
})
setOnTouchListener(View.OnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_UP) {
if (event.rawX >= (this.right - this.compoundPaddingRight)) {
this.setText("")
return@OnTouchListener true
}
}
return@OnTouchListener false
})
}
그런 다음 onCreate
방법에 따라 다음과 같이 사용하십시오.
yourEditText.setupClearButtonWithAction()
BTW, 당신은 R.drawable.ic_clear
먼저 또는 명확한 아이콘 을 추가해야합니다 . 이것은 google- https://material.io/tools/icons/?icon=clear&style=baseline 에서 온 것입니다.
답변
Android의 지원 라이브러리에는 정확히이 작업을 수행하는 SearchView
클래스가 있습니다. ( EditText
그러나 파생되지는 않았으므로 SearchView.OnQueryTextListener
대신 을 사용해야 합니다 TextWatcher
)
XML에서 다음과 같이 사용하십시오.
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="@string/SearchHint"
app:iconifiedByDefault="false"
app:queryHint="@string/SearchHint" />
답변
Drawable x = getResources().getDrawable(R.drawable.x);
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight());
mEditText.setCompoundDrawables(null, null, x, null);
여기서 x는 다음과 같습니다.
답변
들어 drawable resource
당신은 표준 안드로이드 이미지를 사용할 수 있습니다 :
http://androiddrawables.com/Menu.html
예를 들면 다음과 같습니다.
android:background="@android:drawable/ic_menu_close_clear_cancel"