当键盘显示时,全屏AlertDialog有刺耳的动画



在此处观看视频以查看问题:https://streamable.com/s0yhrm

或者在更快的设备上查看:https://streamable.com/4sshdn

我有一个AlertDialog,我已经设置了它来占用所有的垂直空间。问题是,当键盘出现时,当AlertDialog调整大小以适合键盘上方时,我会得到一个令人讨厌的动画。有什么办法可以防止这种情况发生吗?理想情况下,它应该在AlertDialog显示之前测量键盘上方的可用空间。


<RelativeLayout 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:id="@+id/enter_address_alert_dialog_root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="4dp">
<TextView
android:id="@+id/title_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="6dp"
android:paddingLeft="12dp"
android:paddingTop="6dp"
android:paddingBottom="4dp"
android:text="Delivery address"
android:textSize="14dp"
android:textStyle="bold" />
<ImageView
android:id="@+id/network_error_imageView"
android:layout_alignParentRight="true"
android:src="@drawable/cloud_off_36dp"
app:tint="@color/colorError"
android:visibility="gone"
tools:visibility="visible"
android:layout_alignTop="@id/title_textView"
android:layout_alignBottom="@id/title_textView"
android:layout_marginRight="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/top_LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_below="@id/title_textView"
android:background="@drawable/autocomplete_list_item_background"
android:elevation="2dp"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="bottom">
<EditText
android:id="@+id/address_editText"
style="@style/MyEditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Street address"
android:imeOptions="actionNext"
android:maxLength="100"
android:maxLines="4"
android:importantForAutofill="no"
android:paddingLeft="4dp"
android:paddingTop="8dp"
android:paddingRight="32dp"
android:selectAllOnFocus="true"
android:textSize="@dimen/address_alert_dialog_text_size" />
<ImageButton
android:id="@+id/clear_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingTop="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingBottom="0dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_close_24dp" />
</RelativeLayout>
<EditText
android:id="@+id/enter_address_unit_number_alert_dialog_edit_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="16dp"
android:layout_weight="0.8"
android:gravity="center"
android:imeOptions="actionDone"
android:hint="Unit #"
android:importantForAutofill="no"
android:inputType="textPostalAddress|textCapWords|text"
android:maxLength="30"
android:paddingTop="6dp"
android:selectAllOnFocus="true"
android:textSize="@dimen/address_alert_dialog_text_size" />
</LinearLayout>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/map_button"
android:layout_below="@id/top_LinearLayout">
<!--Single parent to ScrollView-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/no_store_address_enter_address_alert_dialog_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginTop="@dimen/address_autocomplete_margin_above_empty_view"
android:layout_marginRight="18dp"
android:textSize="@dimen/address_alert_dialog_no_store_address_text_size"
android:text="You haven't entered a store address. Without this, the app can't locate delivery addresses or calculate driving distances. To fix this, go to Settings and use the 'Store addresses' option."
android:textColor="#F00"
android:visibility="gone" />
<TextView
android:id="@+id/enter_address_alert_dialog_empty_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginTop="@dimen/address_autocomplete_margin_above_empty_view"
android:layout_marginRight="18dp"
android:drawablePadding="6dp"
android:gravity="center_horizontal"
android:padding="12dp"
android:text="Start typing an address above and matching results will show up here"
android:textSize="@dimen/address_alert_dialog_text_size"
app:drawableTint="@color/colorAutocompleteEmptyViewIcon"
app:drawableTopCompat="@drawable/ic_search_white_28dp" />
</LinearLayout>
</ScrollView>
<ListView
android:id="@+id/enter_address_alert_dialog_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/map_button"
android:layout_below="@id/scrollView"
android:layout_marginLeft="8dp"
android:layout_marginTop="4dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="4dp"
android:divider="@android:color/transparent"
android:dividerHeight="-3dp" />
<TextView
android:id="@+id/map_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="16dp"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="MAP"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
<TextView
android:id="@+id/cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginRight="15dp"
android:layout_toLeftOf="@id/submit_button"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="CANCEL"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
<TextView
android:id="@+id/submit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="20dp"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="SUBMIT"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
</RelativeLayout>

没有"默认";解决问题的方法。首先出现Dialog,然后绘制EditText,它请求聚焦,然后键盘显示-Dialog已经绘制(全屏(,所以它缩小

也许你可以试着在Dialog出现之前强制显示键盘

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).
toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

然后显示你的CCD_ 5(可能有几毫秒的延迟?(并呼叫CCD_;连接";键盘切换到新显示的EditText(会自动进行更改,因为EditText可能会在充气时请求对焦(

只有当用户开始键入时,我才能通过扩展AlertDialog的高度来以令人满意的方式解决这个问题。请在此处查看视频:https://streamable.com/oj3fbv

addressEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String inputText = s.toString().toLowerCase().trim();
if (inputText.length() > 0) {
if (inputText.length() == 1) {
autocompleteListView.setVisibility(View.VISIBLE);
RelativeLayout.LayoutParams listViewParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
listViewParams.addRule(RelativeLayout.BELOW, topLinearLayout.getId());
listViewParams.addRule(RelativeLayout.ABOVE, mapButton.getId());
listViewParams.leftMargin = dpToPx(8);
listViewParams.rightMargin = dpToPx(8);
listViewParams.topMargin = dpToPx(4);
listViewParams.bottomMargin = dpToPx(4);
autocompleteListView.setLayoutParams(listViewParams);
RelativeLayout.LayoutParams mapButtonParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
mapButtonParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
mapButton.setLayoutParams(mapButtonParams);
}
clearButton.setVisibility(View.VISIBLE);
if (inputText.length() > 1 && storeAddressEntered) {
alertDialogEmptyView.setVisibility(View.GONE);
scrollView.setVisibility(View.GONE);
}
}
alertDialogAdapter.getFilter().filter(inputText);
}
});
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/enter_address_alert_dialog_root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="4dp">
<TextView
android:id="@+id/title_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="6dp"
android:paddingLeft="12dp"
android:paddingTop="6dp"
android:paddingBottom="4dp"
android:text="Delivery address"
android:textSize="14dp"
android:textStyle="bold" />
<ImageView
android:id="@+id/network_error_imageView"
android:layout_alignParentRight="true"
android:src="@drawable/cloud_off_36dp"
app:tint="@color/colorError"
android:visibility="gone"
tools:visibility="visible"
android:layout_alignTop="@id/title_textView"
android:layout_alignBottom="@id/title_textView"
android:layout_marginRight="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/top_LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_below="@id/title_textView"
android:background="@drawable/autocomplete_list_item_background"
android:elevation="2dp"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="bottom">
<EditText
android:id="@+id/address_editText"
style="@style/MyEditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Street address"
android:imeOptions="actionNext"
android:maxLength="100"
android:maxLines="4"
android:importantForAutofill="no"
android:paddingLeft="4dp"
android:paddingTop="8dp"
android:paddingRight="32dp"
android:selectAllOnFocus="true"
android:textSize="@dimen/address_alert_dialog_text_size" />
<ImageButton
android:id="@+id/clear_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingTop="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingBottom="0dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_close_24dp" />
</RelativeLayout>
<EditText
android:id="@+id/enter_address_unit_number_alert_dialog_edit_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="16dp"
android:layout_weight="0.8"
android:gravity="center"
android:imeOptions="actionDone"
android:hint="Unit #"
android:importantForAutofill="no"
android:inputType="textPostalAddress|textCapWords|text"
android:maxLength="30"
android:paddingTop="6dp"
android:selectAllOnFocus="true"
android:textSize="@dimen/address_alert_dialog_text_size" />
</LinearLayout>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top_LinearLayout">
<!--Single parent to ScrollView-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/no_store_address_enter_address_alert_dialog_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginTop="@dimen/address_autocomplete_margin_above_empty_view"
android:layout_marginRight="18dp"
android:textSize="@dimen/address_alert_dialog_no_store_address_text_size"
android:text="You haven't entered a store address. Without this, the app can't locate delivery addresses or calculate driving distances. To fix this, go to Settings and use the 'Store addresses' option."
android:textColor="#F00"
android:visibility="gone" />
<TextView
android:id="@+id/enter_address_alert_dialog_empty_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
android:drawablePadding="6dp"
android:gravity="center_horizontal"
android:padding="12dp"
android:text="Start typing an address above and matching results will show up here"
android:textSize="@dimen/address_alert_dialog_text_size"
app:drawableTint="@color/colorAutocompleteEmptyViewIcon"
app:drawableTopCompat="@drawable/ic_search_white_28dp" />
</LinearLayout>
</ScrollView>
<ListView
android:id="@+id/enter_address_alert_dialog_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/scrollView"
android:visibility="gone"
android:layout_marginLeft="8dp"
android:layout_marginTop="4dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="4dp"
android:divider="@android:color/transparent"
android:dividerHeight="-3dp" />
<TextView
android:id="@+id/map_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/scrollView"
android:layout_marginLeft="16dp"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="MAP"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
<TextView
android:id="@+id/cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/map_button"
android:layout_marginRight="15dp"
android:layout_toLeftOf="@id/submit_button"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="CANCEL"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
<TextView
android:id="@+id/submit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignBottom="@id/map_button"
android:layout_marginRight="20dp"
android:background="@drawable/toolbar_image_button_ripple"
android:fontFamily="sans-serif-medium"
android:padding="8dp"
android:text="SUBMIT"
android:textColor="@color/colorAlertDialogButton"
android:textSize="@dimen/alert_dialog_button_text_size" />
</RelativeLayout>

最新更新