如何制作固定的底部对话框

时间:2018-12-27 17:05:09

标签: java android android-dialog

我想创建一个底部对话框,其中将显示我提供的文本,并且可以随时隐藏并显示它。该对话框将显示在所有活动中。例如,如果应用程序当前未连接到服务器,我将在底部对话框中显示“无连接”,并且此对话框将在屏幕上的任何活动中显示。如何制作这个对话框,我尝试用XML制作它,但是我需要在每个活动中编写它的show / hide方法,这是一件乏味的工作。 这是一张图像,显示了我要创建的底部对话框。

enter image description here

1 个答案:

答案 0 :(得分:1)

创建一个易于显示在所有活动上的自定义对话框。可以自定义对话框作为图片中的样式。

这里是一个示例,requestFeature()必须在添加内容之前被调用,其他设置必须在setContentView()之后。

public class YOUR_DIALOG extends Dialog {
    private String mText;

    public YOUR_DIALOG(Context context, String text) {
        super(context);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        mText = text;
    }

    @Override
    public void onStart() {
        super.onStart();

        Window dialogWindow = getWindow();

        dialogWindow.getAttributes().width = android.widget.ListPopupWindow.MATCH_PARENT;
        dialogWindow.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
        dialogWindow.setBackgroundDrawable(new ColorDrawable(0xffff7320));
        dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    }

    // Everything else remains the same, as is the case with the normal dialog box.
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_dialog_layout);

        textview = findViewById(...);
        textview.setText(mText);
    }
}

和布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textview"
        android:textAppearance="@android:style/TextAppearance.Material.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:padding="10dp"
        android:drawablePadding="10dp"
        android:drawableLeft="@mipmap/ic_launcher"
        android:textStyle="bold"
        android:textColor="#fff"/>
</LinearLayout>

您的活动

new YOUR_DIALOG(this,"Dialog").show();