How can I create clean Button in AutoCompleteTextView, when I click clear button I want to clear all text in AutoCompleteTextView, see in picture
In android, we can create an AutoCompleteTextView control in two ways either manually in an XML file or create it in the Activity file programmatically. First we create a new project by following the below steps: Click on File, then New => New Project. After that include the Kotlin support and click on next.
2. setThreshold(int threshold): This method is used to set threshold value that help us to start the searching from a specific character. In this we set int type value used to specify the threshold .
This defines the hint view displayed in the drop down menu. This defines the number of characters that the user must type before completion suggestions are displayed in a drop down menu.
If you want to get suggestions , when you type in an editable text field , you can do this via AutoCompleteTextView. It provides suggestions automatically when the user is typing. The list of suggestions is displayed in a drop down menu from which the user can choose an item to replace the content of the edit box with.
As explained in this post by Michael Derazon, you can extend your AutoCompleteTextView to include a custom clear function. The implementation will look like this:
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AutoCompleteTextView;
/**
* sub class of {@link android.widget.AutoCompleteTextView} that includes a clear (dismiss / close) button with
* a OnClearListener to handle the event of clicking the button
* based on code from {@link http://www.gubed.net/clearableautocompletetextview}
* @author Michael Derazon
*
*/
public class ClearableAutoCompleteTextView extends AutoCompleteTextView {
// was the text just cleared?
boolean justCleared = false;
// if not set otherwise, the default clear listener clears the text in the
// text view
private OnClearListener defaultClearListener = new OnClearListener() {
@Override
public void onClear() {
ClearableAutoCompleteTextView et = ClearableAutoCompleteTextView.this;
et.setText("");
}
};
private OnClearListener onClearListener = defaultClearListener;
// The image we defined for the clear button
public Drawable imgClearButton = getResources().getDrawable(
R.drawable.abc_ic_clear_holo_light);
public interface OnClearListener {
void onClear();
}
/* Required methods, not used in this implementation */
public ClearableAutoCompleteTextView(Context context) {
super(context);
init();
}
/* Required methods, not used in this implementation */
public ClearableAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
/* Required methods, not used in this implementation */
public ClearableAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
void init() {
// Set the bounds of the button
this.setCompoundDrawablesWithIntrinsicBounds(null, null,
imgClearButton, null);
// if the clear button is pressed, fire up the handler. Otherwise do nothing
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ClearableAutoCompleteTextView et = ClearableAutoCompleteTextView.this;
if (et.getCompoundDrawables()[2] == null)
return false;
if (event.getAction() != MotionEvent.ACTION_UP)
return false;
if (event.getX() > et.getWidth() - et.getPaddingRight() - imgClearButton.getIntrinsicWidth()) {
onClearListener.onClear();
justCleared = true;
}
return false;
}
});
}
public void setImgClearButton(Drawable imgClearButton) {
this.imgClearButton = imgClearButton;
}
public void setOnClearListener(final OnClearListener clearListener) {
this.onClearListener = clearListener;
}
public void hideClearButton() {
this.setCompoundDrawables(null, null, null, null);
}
public void showClearButton() {
this.setCompoundDrawablesWithIntrinsicBounds(null, null, imgClearButton, null);
}
}
See the full post for a complete guide on how to implement it. The result will be as below picture:
Try this:
activity_main.xml:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="5dp">
<AutoCompleteTextView
android:layout_marginTop="20dp"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:hint="type here..."
android:dropDownWidth="300dp"/>
<Button
android:id="@+id/clear"
android:layout_width="23dp"
android:layout_height="23dp"
android:layout_marginRight="10dp"
android:layout_gravity="right|bottom"
android:layout_marginBottom="10dp"
android:background="@drawable/ic_close_black_24dp"
android:onClick="clear"/>
</FrameLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity {
AutoCompleteTextView text;
Button clear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (AutoCompleteTextView) findViewById(R.id.text);
clear = (Button) findViewById(R.id.clear);
clear.setVisibility(View.INVISIBLE);
//close button visibility for manual typing
text.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
//do nothing
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.length() != 0) {
clear.setVisibility(View.VISIBLE);
} else {
clear.setVisibility(View.GONE);
}
}
});
//sample array
String[] array = {"alpha", "beta", "cupcake", "donut", "eclair", "froyo", "gingerbread", "honeycomb", "icecreamsandwich", "jellybean", "kitkat", "lollipop", "marshmallow"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,array);
text.setThreshold(1); //will start working from first character
text.setAdapter(adapter); //setting the adapter data into the AutoCompleteTextView
//Shows drop down list on touch
text.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
text.showDropDown();
return false;
}
});
//close button visibility for autocomplete text view selection
text.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
clear.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
clear.setVisibility(View.GONE);
}
});
}
public void clear(View view) {
text.setText("");
clear.setVisibility(View.GONE);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With