我为我的应用实现了一个自定义AlertDialog,它可以与我测试过的所有设备配合使用,特别是对于使用Samsung One UI在Android 9上运行的Samsung设备而言。对于所说的三星设备,当我创建对话框时,它总是显示在屏幕的底部而不是中心。
“我的自定义警报对话框”
public static class DialogViewHolder {
private CustomButton btnAccept, btnCancel;
private CustomTextView title, message;
private AlertDialog alertDialog;
private View view;
private Context context;
private LinearLayout bg;
public DialogViewHolder(Context context) {
this.inflateView(context); // Should be the first
this.buildAlertDialog(context);
this.context = context;
}
/**
* Inflates the custom view
*/
private void inflateView(Context context) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
this.view = inflater.inflate(R.layout.custom_alert_dialog, null);
}
/** Builds the alert Dialog */
private void buildAlertDialog(Context context) {
// Create Builder Configuration
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.CustomDialog);
builder.setCancelable(false);
builder.setView(this.view);
}
}
我已经尝试过使用布局文件来确保它不是偶然现象,但是后来我确认这仅在运行Android Pie的三星设备上才发生。
我是否正确地假设它与Samsung One UI有关?根据我对UI的了解,使用该UI的大多数对话框都会在屏幕底部显示警报对话框。我的最终目标是能够将我的自定义AlertDialog保留在屏幕中间。
自定义AlertDialog的布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<LinearLayout
android:id="@+id/dialog_bg_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/alert_background_color"
android:orientation="vertical">
<RelativeLayout
android:layout_width="@dimen/logout_container_width"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="@dimen/logout_padding_top"
android:paddingRight="@dimen/logout_padding_left_right"
android:paddingLeft="@dimen/logout_padding_left_right">
<com.example.dialog.custom_views.CustomTextView
android:id="@+id/alert_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/logout_padding_top"
android:gravity="center"
android:textAlignment="center"
android:textColor="@color/alert_title_color"
android:textSize="@dimen/logout_header_title_size"
app:font_trait="Bold" />
<com.example.dialog.custom_views.CustomTextView
android:id="@+id/alert_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/alert_header"
android:gravity="center"
android:paddingBottom="@dimen/data_usage_header_margin"
android:paddingTop="@dimen/data_usage_header_margin"
android:textAlignment="center"
android:textColor="@color/alert_negative_button_color"
android:textSize="@dimen/logout_message_size" />
<com.example.dialog.custom_views.CustomButton
android:id="@+id/positive_button"
android:layout_width="match_parent"
android:layout_height="@dimen/logout_button_height"
android:layout_below="@+id/alert_message"
android:layout_marginBottom="@dimen/dialog_buttons_margin"
android:background="@color/alert_positive_button_color"
android:textSize="@dimen/logout_buttons_text_size"
app:font_trait="Normal"/>
<com.example.dialog.custom_views.CustomButton
android:id="@+id/negative_button"
android:layout_width="match_parent"
android:layout_height="@dimen/logout_button_height"
android:layout_below="@+id/positive_button"
android:background="@color/alert_negative_button_color"
android:textSize="@dimen/logout_buttons_text_size"
android:layout_marginBottom="@dimen/dialog_cancel_margin_bottom"
app:font_trait="Normal">
</com.example.dialog.custom_views.CustomButton>
</RelativeLayout>
</LinearLayout>
</FrameLayout>