我正在创建一个自定义片段对话框,它有圆角,布局不会填满屏幕宽度(我更喜欢它只是 Package 它的内容)。
这是我的rounded_dialog.xml
在drawable文件夹,这是由我的自定义ThemeWithCorners
调用作为对话框的背景.我也试图将其设置为背景的线性布局创建其内容,但没有工作.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid android:color="@android:color/white"/>
<corners android:radius="20dp"
/>
</shape>
这就是我如何调用对话框:
final String FTAG = "TAG_FRAGMENT_DIALOG_CALENDAR";
dialog = (CalendarDialog) fm.findFragmentByTag(FTAG);
ft = fm.beginTransaction();
if (dialog != null)
{
ft.remove(dialog);
}
dialog = CalendarDialog.newInstance(this);
dialog.setCancelable(true);
ft.add(dialog, FTAG);
ft.show(dialog);
ft.commit();
在对话框的onCreate方法中,我设置了样式和主题:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.ThemeWithCorners);
}
这是onCreateView方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setCanceledOnTouchOutside(true);
v = (MyCalendar)inflater.inflate(R.layout.calendar_dialog, container, true)
return v;
}
我也试着把它添加到onCreateDialog方法中,就像SO上的其他答案建议的那样,但也没有工作:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
Dialog d = super.onCreateDialog(savedInstanceState);
LayoutParams lp=d.getWindow().getAttributes();
d.getWindow().setBackgroundDrawable(new ColorDrawable(0));
lp.width=-2;lp.height=-2;lp.gravity=Gravity.CENTER;
lp.dimAmount=0;
lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL;
return d;
}
所以总结一下,我想要圆角,而不是100%的屏幕宽度,它最好应该 Package 它的内容。拜托,拜托,我需要一些帮助,我真的很绝望,我已经尝试了好几天了!
9条答案
按热度按时间nkoocmlb1#
一个更新的解决方案,适用于我使用Kotlin。
我为对话框设置背景(rounded_dialog. xml)如下:
然后以编程方式计算屏幕宽度,然后使用此代码片段从中减去Margin值。
然后在onStart回调函数中,我应用了宽度减去Margin。这是完整的代码。
XML布局
fragment_cancel_dialog
ht4b089n2#
DialogFragment有一个快速修复方法。例如,在AlertDialog.Builder(context,style)中的onCreateDialog()方法中添加style:
样式文件夹中
custom_alert_dialog
在可绘制文件夹
corner_background.xml
中测试API〉= 21
ruyhziif3#
对于任何想要使用AlertDialogBuilder和透明的背景,并在XML文件中设置Drawable的人。
在Builder上设置此主题,如下所示
其中R.drawable.dialog_background是:
dwthyt8l4#
我认为要制作圆角,如果你把cardview作为布局的根,并在onCreateView()中添加下面的代码,就会容易得多:alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transpare)
kgqe7b3p5#
这是一个老问题,它忽略了在DialogFragment组件中实现圆角边缘的最简单方法。你可以用一行代码来实现:
1tu0hz3e6#
对话背景:
dialog_rounded_bg.xml
对话框布局:
dialog_rounded.xml
对话片段:
RoundedDialog.java
**更新:**如果不设置
Window.FEATURE_NO_TITLE
标志,Android ≤ 4.4的设备对话框顶部会出现blue line appears。vvppvyoh7#
好吧,我刚刚找到了一个解决方案,虽然我不是很满意。
我为对话框设置背景(rounded_dialog. xml)如下:
然后我在它的'onCreateView'方法中将其设置为我的对话框,如下所示。圆角在这段代码中并不是真正必要的,因为背景是透明的,但填充是重要的,因为对话框实际上仍然和屏幕一样宽,但填充使它看起来不是这样。
最后,我将对话框组件的背景设置为另一个自定义的可绘制对象,使角变圆。我有一个LinearLayout,顶部是RelativeLayout,底部是TextView,所以我将@null设置为父LinearLayout,并将两个不同的自定义可绘制对象设置为两个部分,其中一个具有圆形的bottomCorners,另一个具有圆形的topCorners。
我相信有一个更合适的解决方案,因为这是正确的只是视觉上,而不是真正的功能,但足够正确的这种情况。
pu3pd22g8#
使用Kotlin和View Binding更新2022答案-
rpppsulh9#
**另一种方式:**使用
onCreate()
方法中的setStyle()
,为您的DialogFragment
应用样式。然后,您可以在
your_layout.xml
文件的根视图中一如既往地使用android:background
。步骤:
1.style.xml文件(res文件夹):
1.在layout文件夹创建
your_layout.xml
文件:1.在drawable文件夹创建
bg_corner_dialog.xml
文件:1.最后,将
style
和layout
应用到您的DialogFragment
:我希望这对你有帮助。
最好的祝愿