最后,我想我已经完成了你所期望的。即使我对同一个问题添加了几个答案,我也将此答案添加为单独的答案,以便您更清楚。
它的 UI 很脏,我准备得很仓促。你能看到StackBar
屏幕底部的。当你点击OK
按钮时显示AlertDialog
这是我的做法。
以下代码属于custom_dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="Sample Test for Custom Dialog"
android:textSize="20sp"
android:layout_toRightOf="@+id/image"
android:layout_alignBottom="@+id/image" />/>
<Button
android:id="@+id/dialogButtonOK"
android:layout_width="100px"
android:layout_height="wrap_content"
android:text=" Ok "
android:layout_below="@+id/text"
android:layout_centerHorizontal="true" />
以下代码属于activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/rootView"
tools:context="com.stackoverflow.answer.androidcustomdialog.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
以下代码属于MainActivity.java
package com.stackoverflow.answer.androidcustomdialog;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View rootView=(View)findViewById(R.id.rootView);
AlertDialog.Builder mAlertDialogBuilder = new AlertDialog.Builder(this);
// inflate the custom dialog view
LayoutInflater inflater=getLayoutInflater();
final View mDialogView = inflater.inflate(R.layout.custom_dialog_layout, null);
// set the View for the AlertDialog
mAlertDialogBuilder.setView(mDialogView);
Button btn = (Button) mDialogView.findViewById(R.id.dialogButtonOK);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Pass the RootView to the SnackBar
Snackbar
.make(rootView, "SnackBar in Dialog", Snackbar.LENGTH_LONG)
.show();
}
});
AlertDialog alertDialog = mAlertDialogBuilder.create();
alertDialog.show();
}
}
随意问任何你需要的东西。在这个例子中,我没有使用片段。如果你需要我也可以帮忙。如果您需要,我也可以发送项目。给我你的电子邮件 :)
总而言之,我真正所做的是,只需将 Root Layout View 传递给SnackBar
. 就这么简单。
还有一件事..
根据Google Material Design Snackbars & Toasts Usage Reference
放置
Snackbars 出现在屏幕上大多数元素的上方,它们的高度与浮动操作按钮相同。但是,它们的高度低于对话框、底部工作表和导航抽屉。
因此,Snackbar 的高度总是比对话框低。