Android의 AutoCommpleteTextView에서는 항상 모든 후보를 차트에 표시합니다.
10626 단어 AndroidAutoCompleteTextViewJava
개요
AndroidAutoCompleteTextView에 모든 후보를 입력 후보에 표시하는 방법이 적혀 있습니다.
예를 들어, 입력 표시줄에 "100"을 입력할 때 AutoCompuleteTextView는 아래 그림의 100과 일치하는 후보만 표시합니다.
이번에는 입력란에 '100' 을 입력해도 모든 후보 내용이 표시됩니다.
이 환경은 Android 8.1, targetSdkVersion 26입니다.
용도
AutoCommpleteTextView는 자동 완성 기능을 제공하여 입력한 텍스트 부분이 일치하는 제안을 열거하고 선택하는 데 사용됩니다.사전에 AutoCommpleteTextView에서 레지스트리에 후보 일람을 표시하는 Adapter를 사용하면 입력한 텍스트와 일치하는 후보가 표시됩니다.
그나저나 텍스뷰로 명명됐지만 상속EditText됐다.왜 이렇게 헷갈리는 이름을 지었을까?
이번에는 입력 내용과 상관없이 모든 후보 기능을 한눈에 볼 수 있도록 실시하기로 했다.요컨대 사용자가 입력할 수 있는Spinner 같은 것을 원합니다.따라서 사용자 입력을 간소화할 수 있다.
메서드
먼저 만들기 Filter (android.widget.Filter).이것은 사용자가 입력할 때 후보 내용을 어떻게 선별하는지 정의합니다.이번에는 모든 것을 압축하지 않기 위해perform Filtering에 비어 있는 Filter Results를 사용합니다.class SampleArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
return new FilterResults();
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
그런 다음 어댑터를 만듭니다.이 곳에서 GetFilter 방법을 다시 쓰고 방금 만든 Filter를 되돌려줍니다.(구조기 적절)class SampleArrayAdapter extends ArrayAdapter<String> {
public SampleArrayAdapter tArrayAdapter (@NonNull Context context, int textViewResourceId, @NonNull String[] objects) {
super(context, textViewResourceId, objects);
}
@Override
public Filter getFilter() {
return new SampleArrayFilter();
}
}
작성된 어댑터를 AutoCompuleteTextView에 로그인합니다.String[] sampleArray = {"400", "300", "200", "100", "75", "50", "25"};
SampleArrayAdapter adapter = new SampleArrayAdapter (getContext(), android.R.layout.simple_dropdown_item_1line, sampleArray);
AutoCompleteTextView sammpleView = findViewById(R.id.sampleSpeedEditText);
sammpleView .setAdapter(adapter );
따라서 모든 후보가 자동으로 표시됩니다.
입력하지 않아도 후보 표시
하지만 이런 상태에는 문제가 있다.AutoCommpleteTextView는 표준 상태에서 두 개 이상의 입력 후보를 표시합니다.여러 후보가 나오는 것을 막기 위한 것으로 보인다.이에 비해 setThreshold에 후보를 표시하기 전에 문자 수를 지정할 수 있지만 최소 문자는 1문자이기 때문에 1문자를 입력하지 않으면 후보를 표시할 수 없습니다.
이번 목적은 사용자 입력 상태에서 모든 후보를 표시하고 문자 입력과 후보 선택을 가능하게 함으로써 입력을 간소화하는 것이다.그래서 0자로 표시하고 싶어요.
따라서 다음과 같이 활동 설정을 수행합니다.sampleView.setThreshold(1);
sampleView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
sampleView.showDropDown();
}
}
});
sampleView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sampleView.showDropDown();
}
});
AutoCompuleteTextView의 초점과 클릭을 통해 후보를 강제로 표시합니다.이번에는 두 가지 이벤트를 모두 설정해 UI와 화면 구성에 따라 어느 것이든 괜찮다고 생각한다.
이 방법 외에 AutoCommpleteTextView를 계승하는 반을 만드는 방법도 있다.이 경우 enoughToFilter를 다시 씁니다. setThreshold의 값을 무시하고 실제 값을 되돌려야 합니다.(비록 썼지만 나는 해 본 적이 없다.)
최후
그런 느낌으로 입력을 실현해 보았고 쌍방이 모두 할 수 있는 AutoCompulete TextView를 선택했다.다소 보기 싫은 느낌은 들었지만, 뷰를 만들기 위한 목적이었던 것 같아요.
개인적으로 이 정도의 뷰는 표준으로 준비했으면 좋겠는데 그렇게 생각하지 않는 것도 아니고요.안드로이드 표준 뷰, 가려운 데 닿지 않는 모드가 너무 많아서...
참고 자료
AutoCommpleteTextView는 자동 완성 기능을 제공하여 입력한 텍스트 부분이 일치하는 제안을 열거하고 선택하는 데 사용됩니다.사전에 AutoCommpleteTextView에서 레지스트리에 후보 일람을 표시하는 Adapter를 사용하면 입력한 텍스트와 일치하는 후보가 표시됩니다.
그나저나 텍스뷰로 명명됐지만 상속EditText됐다.왜 이렇게 헷갈리는 이름을 지었을까?
이번에는 입력 내용과 상관없이 모든 후보 기능을 한눈에 볼 수 있도록 실시하기로 했다.요컨대 사용자가 입력할 수 있는Spinner 같은 것을 원합니다.따라서 사용자 입력을 간소화할 수 있다.
메서드
먼저 만들기 Filter (android.widget.Filter).이것은 사용자가 입력할 때 후보 내용을 어떻게 선별하는지 정의합니다.이번에는 모든 것을 압축하지 않기 위해perform Filtering에 비어 있는 Filter Results를 사용합니다.class SampleArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
return new FilterResults();
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
그런 다음 어댑터를 만듭니다.이 곳에서 GetFilter 방법을 다시 쓰고 방금 만든 Filter를 되돌려줍니다.(구조기 적절)class SampleArrayAdapter extends ArrayAdapter<String> {
public SampleArrayAdapter tArrayAdapter (@NonNull Context context, int textViewResourceId, @NonNull String[] objects) {
super(context, textViewResourceId, objects);
}
@Override
public Filter getFilter() {
return new SampleArrayFilter();
}
}
작성된 어댑터를 AutoCompuleteTextView에 로그인합니다.String[] sampleArray = {"400", "300", "200", "100", "75", "50", "25"};
SampleArrayAdapter adapter = new SampleArrayAdapter (getContext(), android.R.layout.simple_dropdown_item_1line, sampleArray);
AutoCompleteTextView sammpleView = findViewById(R.id.sampleSpeedEditText);
sammpleView .setAdapter(adapter );
따라서 모든 후보가 자동으로 표시됩니다.
입력하지 않아도 후보 표시
하지만 이런 상태에는 문제가 있다.AutoCommpleteTextView는 표준 상태에서 두 개 이상의 입력 후보를 표시합니다.여러 후보가 나오는 것을 막기 위한 것으로 보인다.이에 비해 setThreshold에 후보를 표시하기 전에 문자 수를 지정할 수 있지만 최소 문자는 1문자이기 때문에 1문자를 입력하지 않으면 후보를 표시할 수 없습니다.
이번 목적은 사용자 입력 상태에서 모든 후보를 표시하고 문자 입력과 후보 선택을 가능하게 함으로써 입력을 간소화하는 것이다.그래서 0자로 표시하고 싶어요.
따라서 다음과 같이 활동 설정을 수행합니다.sampleView.setThreshold(1);
sampleView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
sampleView.showDropDown();
}
}
});
sampleView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sampleView.showDropDown();
}
});
AutoCompuleteTextView의 초점과 클릭을 통해 후보를 강제로 표시합니다.이번에는 두 가지 이벤트를 모두 설정해 UI와 화면 구성에 따라 어느 것이든 괜찮다고 생각한다.
이 방법 외에 AutoCommpleteTextView를 계승하는 반을 만드는 방법도 있다.이 경우 enoughToFilter를 다시 씁니다. setThreshold의 값을 무시하고 실제 값을 되돌려야 합니다.(비록 썼지만 나는 해 본 적이 없다.)
최후
그런 느낌으로 입력을 실현해 보았고 쌍방이 모두 할 수 있는 AutoCompulete TextView를 선택했다.다소 보기 싫은 느낌은 들었지만, 뷰를 만들기 위한 목적이었던 것 같아요.
개인적으로 이 정도의 뷰는 표준으로 준비했으면 좋겠는데 그렇게 생각하지 않는 것도 아니고요.안드로이드 표준 뷰, 가려운 데 닿지 않는 모드가 너무 많아서...
참고 자료
class SampleArrayFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence prefix) {
return new FilterResults();
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
class SampleArrayAdapter extends ArrayAdapter<String> {
public SampleArrayAdapter tArrayAdapter (@NonNull Context context, int textViewResourceId, @NonNull String[] objects) {
super(context, textViewResourceId, objects);
}
@Override
public Filter getFilter() {
return new SampleArrayFilter();
}
}
String[] sampleArray = {"400", "300", "200", "100", "75", "50", "25"};
SampleArrayAdapter adapter = new SampleArrayAdapter (getContext(), android.R.layout.simple_dropdown_item_1line, sampleArray);
AutoCompleteTextView sammpleView = findViewById(R.id.sampleSpeedEditText);
sammpleView .setAdapter(adapter );
하지만 이런 상태에는 문제가 있다.AutoCommpleteTextView는 표준 상태에서 두 개 이상의 입력 후보를 표시합니다.여러 후보가 나오는 것을 막기 위한 것으로 보인다.이에 비해 setThreshold에 후보를 표시하기 전에 문자 수를 지정할 수 있지만 최소 문자는 1문자이기 때문에 1문자를 입력하지 않으면 후보를 표시할 수 없습니다.
이번 목적은 사용자 입력 상태에서 모든 후보를 표시하고 문자 입력과 후보 선택을 가능하게 함으로써 입력을 간소화하는 것이다.그래서 0자로 표시하고 싶어요.
따라서 다음과 같이 활동 설정을 수행합니다.
sampleView.setThreshold(1);
sampleView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
sampleView.showDropDown();
}
}
});
sampleView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sampleView.showDropDown();
}
});
AutoCompuleteTextView의 초점과 클릭을 통해 후보를 강제로 표시합니다.이번에는 두 가지 이벤트를 모두 설정해 UI와 화면 구성에 따라 어느 것이든 괜찮다고 생각한다.이 방법 외에 AutoCommpleteTextView를 계승하는 반을 만드는 방법도 있다.이 경우 enoughToFilter를 다시 씁니다. setThreshold의 값을 무시하고 실제 값을 되돌려야 합니다.(비록 썼지만 나는 해 본 적이 없다.)
최후
그런 느낌으로 입력을 실현해 보았고 쌍방이 모두 할 수 있는 AutoCompulete TextView를 선택했다.다소 보기 싫은 느낌은 들었지만, 뷰를 만들기 위한 목적이었던 것 같아요.
개인적으로 이 정도의 뷰는 표준으로 준비했으면 좋겠는데 그렇게 생각하지 않는 것도 아니고요.안드로이드 표준 뷰, 가려운 데 닿지 않는 모드가 너무 많아서...
참고 자료
https://qiita.com/Horie1024/items/d52ef21c589b135b5c37
http://maogm.com/blog/edittext-with-popuplist-en.html
https://stackoverflow.com/questions/2718202/custom-filtering-in-android-using-arrayadapter
https://stackoverflow.com/questions/11284368/autocompletetextview-force-to-show-all-items/11302820
https://stackoverflow.com/questions/15544943/show-all-items-in-autocompletetextview-without-writing-text
Reference
이 문제에 관하여(Android의 AutoCommpleteTextView에서는 항상 모든 후보를 차트에 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wa2c/items/2bf9172543ca29af76bc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)