重複の可能性 Android:autocompletetextview、提案リストがtextviewの上に表示されますか?
ユーザーが提案リストをスクロールすると、キーボードに重複する提案リストを完全に表示しようとしていますが、常に開いています。
ここで私はこのようになっています
これが私のマニフェストファイルです
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.sl"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk Android:minSdkVersion="8" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name" >
<activity
Android:label="@string/app_name"
Android:name=".SuggestionListActivity"
Android:windowSoftInputMode="adjustResize|adjustPan|stateHidden">
<intent-filter >
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
これが私のmain.xmlファイルです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" Android:padding="10dp">
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/hello"
Android:layout_margin="10dp"/>
<TextView Android:layout_margin="10dp"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="This is testing for the auto complete textview in this application to display suggestion list overlapping on keyboard." />
<AutoCompleteTextView Android:id="@+id/autocomplete"
Android:layout_width="fill_parent" Android:layout_margin="5dp"
Android:layout_height="wrap_content" Android:hint="Search"
Android:layout_marginLeft="5dp" Android:dropDownHeight="300dp"
Android:inputType="textAutoComplete" Android:singleLine="true"
/>
</LinearLayout>
リストにフォーカスがあったときにキーボード上に提案を表示するには、このコードで何をするか。
私は以前にこの問題を抱えていました。私の場合、AutocompleteTextView
の上には下よりも多くの画面スペースがあったので(「通常の」デバイスでテスト)、リストは上向きに開きました。 AutocompleteTextView
の下のスペースが増えるようにレイアウトを少し調整し、下向きに開き始めました。それが私にとってそれを修正したものです。
AutoCompleteTextView
の下により多くのスペースがあるようにレイアウトを調整することができます
または
ドロップダウンの高さを変更できますAndroid:dropDownHeight
そして高い値を設定します。これは、scrollView
の内部にあり、AutoCompleteTextView
が上部にある場合に機能します。
フォーカスのあるオプションのリストを表示するには、次のようにします
autoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
autoCompleteTextView.showDropDown();
}
}
});
これにより、ユーザーがAutoCompleteTextView
にフォーカスしたときに、オプションのリストが表示されます。
秘訣は、必要なドロップダウンの高さが下の使用可能なスペースよりも大きくならないようにすることです。私のアプローチは、showDropDown
をオーバーライドするサブクラスを作成することです。
public class DownOnlyAutoCompleteTextView extends AppCompatAutoCompleteTextView {
private final static int MINIMAL_HEIGHT = 50;
public DownOnlyAutoCompleteTextView(Context context) {
super(context);
}
public DownOnlyAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DownOnlyAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void showDropDown() {
Rect displayFrame = new Rect();
getWindowVisibleDisplayFrame(displayFrame);
int[] locationOnScreen = new int[2];
getLocationOnScreen(locationOnScreen);
int bottom = locationOnScreen[1] + getHeight();
int availableHeightBelow = displayFrame.bottom - bottom;
if (availableHeightBelow >= MINIMAL_HEIGHT) {
setDropDownHeight(availableHeightBelow);
}
super.showDropDown();
}
}
次に、これをレイアウトで使用します。例:
<your.package.DownOnlyAutoCompleteTextView
Android:id="@+id/auto_complete_text_view"
Android:layout_margin="12dp"
Android:hint="AutoComplete"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
tools:ignore="HardcodedText" />
調整MINIMAL_HEIGHT
要件に合わせて-下にスペースがないか、ほとんどない場合は、問題を強制しない方がよいでしょう。
使用する: Android:dropDownHeight="wrap_content" in AutoCompleteTextView
レイアウトファイルのAutoCompleteTextView
タグにAndroid:dropDownHeight="100dp"
を追加するだけで、私が推測する最善の解決策になります。ドロップダウンの高さを制御するだけで、スクロールできるようになります。
<AutoCompleteTextView
Android:id="@+id/acetxt_assignclient"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:dropDownHeight="100dp">
</AutoCompleteTextView>
これが私の解決策です
private final static int DELAY_MS = 500;
autoCompletionTextView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
autoCompletionTextView.requestFocus();
new Handler().postDelayed(() -> autoCompletionTextView.showDropDown(), DELAY_MS);
return false;
}
});
キーボードが表示された後、提案リストがAutoCompletionTextViewの上に表示されます。