我想创建一个自定义对话框如下

我尝试了以下几点。

我创建了AlertDialog的子类。生成器,并使用自定义标题和自定义内容视图,并使用,但结果不是预期的。 另一个尝试是子类DialogFragment和自定义对话框内的onCreateDialog,但结果不是预期的。 然后我尝试使用一个普通的Dialog类。结果并不如预期的那样。

在这三种情况下,问题是当我忽略标题视图时,对话框的大小不是预期的,当我使用标题视图时,结果是在内容视图周围有一个粗边框(这看起来真的很糟糕)。现在我脑子里有两个问题……

我怎样才能做到呢?因为我已经尝试了很多事情,直接的回答会更受欢迎。 在android应用程序中显示错误或警告对话框的最佳方式是什么?

编辑 Android开发者文档建议我们应该使用对话片段或对话框向用户显示错误/警报消息。然而,他们一度说……

提示:如果你想要一个自定义对话框,你可以将一个Activity显示为一个对话框,而不是使用对话框api。简单地创建一个活动,并将其主题设置为manifest元素中的theme . holo . dialog。

这是什么意思?仅仅是为了显示错误消息而使用Activity不是太过分了吗??


当前回答

创建自定义对话框的最简单方法:

Initialize and show dialog: ViewDialog alertDialoge = new ViewDialog(); alertDialoge.showDialog(getActivity(), "PUT DIALOG TITLE"); Create method: public class ViewDialog { public void showDialog(Activity activity, String msg) { final Dialog dialog = new Dialog(activity); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setCancelable(false); dialog.setContentView(R.layout.custom_dialoge_feedback); TextView text = (TextView) dialog.findViewById(R.id.text_dialog_feedback); text.setText(msg); Button okButton = (Button) dialog.findViewById(R.id.btn_dialog_feedback); Button cancleButton = (Button) dialog.findViewById(R.id.btn_dialog_cancle_feedback); final EditText edittext_tv = (EditText) dialog.findViewById(R.id.dialoge_alert_text_feedback); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Perfome Action } }); cancleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } } Create layout XML which you want or need.

其他回答

我发现这是显示自定义对话框的最简单方法。

你有布局your_layout。xml

public void showCustomDialog(final Context context) {
    Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.your_layout, null, false);
    findByIds(view);  /*HERE YOU CAN FIND YOU IDS AND SET TEXTS OR BUTTONS*/
    ((Activity) context).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    dialog.setContentView(view);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    window.setBackgroundDrawableResource(R.color.colorTransparent);
    window.setGravity(Gravity.CENTER);
    dialog.show();
}

你可以尝试这个简单的android对话框弹出库来减少混乱的对话框代码。在您的活动中使用它非常简单。 在此之后,您可以在活动中使用此代码来显示对话框

Pop.on(this).with().title(R.string.title).layout(R.layout.custom_pop).show();

出来的地方。Custom_pop是你想要装饰对话框的自定义布局。

下面是用kotlin创建自定义视图对话框的代码。 下面是对话框布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:orientation="vertical" android:layout_width="300dp"
    android:layout_height="400dp">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

在文本视图中创建对话框并更新文本

val dialog = Dialog(activity!!)
dialog.setContentView(R.layout.my_dialog_layout)
dialog.tvTitle.text = "Hello World!!"
dialog.show()

导入自定义警报:

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dse_location_list_filter, null);
final Dialog dialog = new Dialog(Acitvity_name.this);
dialog.setContentView(view);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.show();

在values -> style.xml中添加以下主题

<style name="Theme_Dialog" parent="android:Theme.Light">
     <item name="android:windowNoTitle">true</item>
     <item name="android:windowBackground">@android:color/transparent</item>
</style>

在onCreateDialog方法中使用这个主题,如下所示:

Dialog dialog = new Dialog(FlightBookActivity.this,R.style.Theme_Dialog);

在xml文件中定义你的对话框布局,包括标题栏,并像这样设置xml文件:

dialog.setContentView(R.layout.your_dialog_layout);