Default AlertDialog看起来不错,使用setMessage()可以设置文本 - 很容易。
但是当使用setView()时,对话框会替换给定视图的内容,这很好。
但是,我想保留默认的填充/背景/样式。我搜索了一个合适的样式,我看了一下alert_dialog.xml,但没有找到任何有用的东西。
如何在不模仿的情况下应用默认样式?
答案 0 :(得分:0)
使用:
AlertDialog.Builder b = new AlertDialog.Builder(this);
AlertDialog alert = b.create();
alert.setView(view, 0, 0, 0, 0);
答案 1 :(得分:0)
要修复边距,您可以使用在FrameLayout中包裹Layout,并在Layout中添加边距,如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dialog_margin_title"
android:layout_marginBottom="@dimen/dialog_margin"
android:layout_marginLeft="@dimen/dialog_margin"
android:layout_marginStart="@dimen/dialog_margin"
android:layout_marginRight="@dimen/dialog_margin"
android:layout_marginEnd="@dimen/dialog_margin"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Please enter the email address of the person you would like to follow, this person will be notified." />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress" />
</LinearLayout>
</FrameLayout>
答案 2 :(得分:0)
您可以在创建构建器时设置AlertDialog样式。
示例:
AlertDialog.Builder builder;
if (title != null) {
builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogStyle);
builder.setTitle(title);
}
else {
builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogStyleNoTitle);
}
在styles.xml文件中:
<style name="AlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:textColorPrimary">@color/black</item>
</style>
<style name="AlertDialogStyleNoTitle" parent="AlertDialogStyle">
<item name="android:windowNoTitle">true</item>
</style>
我的风格只是你可以做的一些事情的例子 - 如果你愿意,你可以只有一个对话框风格。只要你从一个Dialog.Alert样式继承,你应该很高兴。
您仍然需要自己设置填充。我查看了材料设计指南,边距是24dp。
答案 3 :(得分:0)
基于AppCompat的源代码
这是一个看起来不错的Dialog自定义视图的布局示例
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/abc_dialog_padding_top_material"
android:paddingLeft="?attr/dialogPreferredPadding"
android:paddingRight="?attr/dialogPreferredPadding"
android:paddingTop="@dimen/abc_dialog_padding_top_material">
<Spinner
android:id="@+id/spinner1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
请注意,使用私有值并非raccomanded,例如abc_dialog_padding_top_material,但我找不到更好的解决方案。