
这是我的目标:
我为一个名为dialog_background.xml的对话框创建了一个drawable
<shape xmlns:androID="http://schemas.androID.com/apk/res/androID" > <solID androID:color="#FFAAAAAA" /> <stroke androID:wIDth="2dp" androID:color="#FF000000" /> <corners androID:radius="20dp" /></shape>
而且我添加了一个风格来使用它:
<style name="MyDialog" parent="@androID:style/theme.Dialog"> <item name="androID:background">@drawable/dialog_background</item></style>
我的自定义视图的布局将会有两个按钮.现在我给你看一个空的linearLayout,使它变得简单.这是playdialog.xml:
<linearLayout 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:orIEntation="vertical" ></linearLayout>
要构建对话框,我使用DialogFragment.这是它的onCreateDialog函数:
public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); builder.setVIEw(inflater.inflate(R.layout.playdialog,null)); return builder.create();} 好的,如果我使用这样的代码,我得到这个:
我尝试将对话框背景设置为透明修改DialogFragment代码:
public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); builder.setVIEw(inflater.inflate(R.layout.playdialog,null)); **NEW** Dialog d = builder.create(); d.getwindow().setBackgroundDrawable(new colorDrawable(androID.graphics.color.transparent)); return d; } 结果是完全一样的,所以我意识到我的对话框下的白色矩形是从我的自定义视图,而不是从对话框.我已经将我的视图的背景设置为dialog_background.xml,所以我不能将其设置为透明,或者我放弃了角落,颜色等.
然后我决定使用dialog_background.xml修改对话框的背景,并将我的视图具有纯色作为背景.
在我的自定义视图布局(playdialog.xml)中,我用以下格式替换了style =“@ style / MyDialog”:
androID:background="#FFAAAAAA"
然后在我的DialogFragment中,我使用了这个代码:
public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); builder.setVIEw(inflater.inflate(R.layout.playdialog,null)); **NEW** Dialog d = builder.create(); d.getwindow().setBackgroundDrawableResource(R.drawable.dialog_background); return d; } 这是我得到的:
这几乎是我想要的,但你可以看到我的自定义视图边框,所以这还不够好.在这一点上,我不知道还能做什么.
有人知道我该如何解决?
谢谢!
@H_502_46@解决方法 我刚创建了一个自定义警报对话框.但它的角落不是圆的.首先创建一个布局为 –
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:tools="http://schemas.androID.com/tools"androID:layout_wIDth="240sp"androID:layout_height="wrap_content"androID:background="#FFFFFF"tools:ignore="SelectableText" ><relativeLayout androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_margin="1sp" tools:ignore="Uselessparent" > <tableLayout androID:ID="@+ID/tablelayout_dialog_Title" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:stretchColumns="1" > <tableRow androID:ID="@+ID/tablerow_dialog_Title" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" tools:ignore="Uselessparent" > <ImageVIEw androID:ID="@+ID/imagevIEw_dialog_image" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:src="@drawable/alertwhite" androID:layout_gravity="center" androID:background="#643c3a" androID:contentDescription="@string/string_todo"/> <TextVIEw androID:ID="@+ID/textvIEw_dialog_Title" androID:layout_wIDth="wrap_content" androID:layout_height="fill_parent" androID:background="#643c3a" androID:padding="10sp" androID:gravity="center_vertical" androID:textcolor="#FFFFFF" androID:textSize="15sp" /> </tableRow> </tableLayout> <VIEw androID:ID="@+ID/vIEwline_dialog" androID:layout_below="@+ID/tablelayout_dialog_Title" androID:layout_wIDth = "wrap_content" androID:layout_height="0.25dip" androID:background="#ffffff" androID:layout_centerVertical ="true" /> <TextVIEw androID:ID="@+ID/textvIEw_dialog_text" androID:layout_below="@+ID/vIEwline_dialog" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:padding="8sp" androID:background="#643c3a" androID:textcolor="#FFFFFF" androID:textSize="12sp" /> <VIEw androID:ID="@+ID/vIEwline1_dialog" androID:layout_wIDth = "wrap_content" androID:layout_height="0.5dip" androID:background="#ffffff" androID:layout_centerVertical ="true" androID:layout_below="@+ID/textvIEw_dialog_text"/> <tableLayout androID:ID="@+ID/tablelayout_dialog_button" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:stretchColumns="*" androID:layout_below="@+ID/vIEwline1_dialog" androID:background="#a8a8a8" > <tableRow androID:ID="@+ID/tablerow_dialog_button" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" tools:ignore="Uselessparent" > <button androID:ID="@+ID/button_dialog_yes" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_margin="8sp" androID:paddingtop="5sp" androID:paddingBottom="5sp" androID:background="@drawable/roundedcornerbuttonfordialog_shape" androID:text="@string/string_yes" /> <button androID:ID="@+ID/button_dialog_no" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_margin="8sp" androID:paddingtop="5sp" androID:paddingBottom="5sp" androID:background="@drawable/roundedcornerbuttonfordialog_shape" androID:text="@string/string_no" /> </tableRow> </tableLayout></relativeLayout>
现在把对话框的代码写成 –
public static voID callAlert(String message,final Context context){ final Dialog dialog = new Dialog(context); dialog.requestwindowFeature(Window.FEATURE_NO_Title); dialog.setContentVIEw(R.layout.customdialog_layout); dialog.getwindow().setBackgroundDrawable(new colorDrawable(color.WHITE)); TextVIEw tvTitle = (TextVIEw) dialog.findVIEwByID(R.ID.textvIEw_dialog_Title); tvTitle.setText("MyApp.."); TextVIEw tvText = (TextVIEw) dialog.findVIEwByID(R.ID.textvIEw_dialog_text); tvText.setText(message); button buttonDialogYes = (button) dialog.findVIEwByID(R.ID.button_dialog_yes); buttonDialogYes.setonClickListener(new OnClickListener() { public voID onClick(VIEw v) { // Do your stuff... dialog.dismiss(); } }); button buttonDialogNo = (button) dialog.findVIEwByID(R.ID.button_dialog_no); buttonDialogNo.setonClickListener(new OnClickListener() { public voID onClick(VIEw v) { // Do your stuff... dialog.dismiss(); } }); dialog.show();} 并称此方法为 –
String message = "Your Message";callAlert(message,callingClass.this);
希望这将有助于您.
@H_502_46@ @H_502_46@ 总结以上是内存溢出为你收集整理的Android:具有自定义视图和圆角的AlertDialog全部内容,希望文章能够帮你解决Android:具有自定义视图和圆角的AlertDialog所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)