Android:具有自定义视图和圆角的AlertDialog

前端之家收集整理的这篇文章主要介绍了Android:具有自定义视图和圆角的AlertDialog前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用自定义视图(没有标题或页脚)和圆角构建一个AlertDialog.我看过很多关于如何做到这一点的帖子,我尝试了很多东西,但是我不能像我想要的那样构建它.

这是我的目标:

我为一个名为dialog_background.xml的对话框创建了一个drawable

  1. <shape xmlns:android="http://schemas.android.com/apk/res/android" >
  2.  
  3. <solid
  4. android:color="#FFAAAAAA" />
  5.  
  6. <stroke
  7. android:width="2dp"
  8. android:color="#FF000000" />
  9.  
  10. <corners android:radius="20dp" />
  11. </shape>

而且我添加了一个风格来使用它:

  1. <style name="MyDialog" parent="@android:style/Theme.Dialog">
  2. <item name="android:background">@drawable/dialog_background</item>
  3. </style>

我的自定义视图的布局将会有两个按钮.现在我给你看一个空的LinearLayout,使它变得简单.这是playdialog.xml:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. style="@style/MyDialog"
  7. >
  8.  
  9. </LinearLayout>

要构建对话框,我使用DialogFragment.这是它的onCreateDialog函数

  1. public Dialog onCreateDialog(Bundle savedInstanceState) {
  2. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  3. LayoutInflater inflater = getActivity().getLayoutInflater();
  4.  
  5. builder.setView(inflater.inflate(R.layout.playdialog,null));
  6. return builder.create();
  7. }

好的,如果我使用这样的代码,我得到这个:

我尝试将对话框背景设置为透明修改DialogFragment代码

  1. public Dialog onCreateDialog(Bundle savedInstanceState) {
  2. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  3. LayoutInflater inflater = getActivity().getLayoutInflater();
  4.  
  5. builder.setView(inflater.inflate(R.layout.playdialog,null));
  6.  
  7. **NEW**
  8.  
  9. Dialog d = builder.create();
  10. d.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
  11. return d;
  12. }

结果是完全一样的,所以我意识到我的对话框下的白色矩形是从我的自定义视图,而不是从对话框.我已经将我的视图的背景设置为dialog_background.xml,所以我不能将其设置为透明,或者我放弃了角落,颜色等.

然后我决定使用dialog_background.xml修改对话框的背景,并将我的视图具有纯色作为背景.

在我的自定义视图布局(playdialog.xml)中,我用以下格式替换了style =“@ style / MyDialog”:

  1. android:background="#FFAAAAAA"

然后在我的DialogFragment中,我使用了这个代码

  1. public Dialog onCreateDialog(Bundle savedInstanceState) {
  2. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
  3. LayoutInflater inflater = getActivity().getLayoutInflater();
  4.  
  5. builder.setView(inflater.inflate(R.layout.playdialog,null));
  6.  
  7. **NEW**
  8.  
  9. Dialog d = builder.create();
  10. d.getWindow().setBackgroundDrawableResource(R.drawable.dialog_background);
  11. return d;
  12. }

这是我得到的:

这几乎是我想要的,但你可以看到我的自定义视图边框,所以这还不够好.在这一点上,我不知道还能做什么.

有人知道我该如何解决

谢谢!

解决方法

我刚创建了一个自定义警报对话框.但它的角落不是圆的.

首先创建一个布局为 –

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="240sp"
  5. android:layout_height="wrap_content"
  6. android:background="#FFFFFF"
  7. tools:ignore="SelectableText" >
  8.  
  9. <RelativeLayout
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_margin="1sp"
  13. tools:ignore="UselessParent" >
  14.  
  15. <TableLayout
  16. android:id="@+id/tablelayout_dialog_title"
  17. android:layout_width="fill_parent"
  18. android:layout_height="wrap_content"
  19. android:layout_gravity="center"
  20. android:stretchColumns="1" >
  21.  
  22. <TableRow
  23. android:id="@+id/tablerow_dialog_title"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. tools:ignore="UselessParent" >
  27.  
  28. <ImageView
  29. android:id="@+id/imageview_dialog_image"
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:src="@drawable/alertwhite"
  33. android:layout_gravity="center"
  34. android:background="#643c3a"
  35. android:contentDescription="@string/string_todo"/>
  36.  
  37. <TextView
  38. android:id="@+id/textview_dialog_title"
  39. android:layout_width="wrap_content"
  40. android:layout_height="fill_parent"
  41. android:background="#643c3a"
  42. android:padding="10sp"
  43. android:gravity="center_vertical"
  44. android:textColor="#FFFFFF"
  45. android:textSize="15sp" />
  46.  
  47. </TableRow>
  48. </TableLayout>
  49.  
  50. <View
  51. android:id="@+id/viewline_dialog"
  52. android:layout_below="@+id/tablelayout_dialog_title"
  53. android:layout_width = "wrap_content"
  54. android:layout_height="0.25dip"
  55. android:background="#ffffff"
  56. android:layout_centerVertical ="true" />
  57.  
  58. <TextView
  59. android:id="@+id/textview_dialog_text"
  60. android:layout_below="@+id/viewline_dialog"
  61. android:layout_width="fill_parent"
  62. android:layout_height="wrap_content"
  63. android:padding="8sp"
  64. android:background="#643c3a"
  65. android:textColor="#FFFFFF"
  66. android:textSize="12sp" />
  67.  
  68. <View
  69. android:id="@+id/viewline1_dialog"
  70. android:layout_width = "wrap_content"
  71. android:layout_height="0.5dip"
  72. android:background="#ffffff"
  73. android:layout_centerVertical ="true"
  74. android:layout_below="@+id/textview_dialog_text"/>
  75.  
  76. <TableLayout
  77. android:id="@+id/tablelayout_dialog_button"
  78. android:layout_width="fill_parent"
  79. android:layout_height="wrap_content"
  80. android:layout_gravity="center"
  81. android:stretchColumns="*"
  82. android:layout_below="@+id/viewline1_dialog"
  83. android:background="#a8a8a8" >
  84.  
  85. <TableRow
  86. android:id="@+id/tablerow_dialog_button"
  87. android:layout_width="fill_parent"
  88. android:layout_height="wrap_content"
  89. tools:ignore="UselessParent" >
  90.  
  91. <Button
  92. android:id="@+id/button_dialog_yes"
  93. android:layout_width="fill_parent"
  94. android:layout_height="wrap_content"
  95. android:layout_margin="8sp"
  96. android:paddingTop="5sp"
  97. android:paddingBottom="5sp"
  98. android:background="@drawable/roundedcornerbuttonfordialog_shape"
  99. android:text="@string/string_yes" />
  100.  
  101. <Button
  102. android:id="@+id/button_dialog_no"
  103. android:layout_width="fill_parent"
  104. android:layout_height="wrap_content"
  105. android:layout_margin="8sp"
  106. android:paddingTop="5sp"
  107. android:paddingBottom="5sp"
  108. android:background="@drawable/roundedcornerbuttonfordialog_shape"
  109. android:text="@string/string_no" />
  110.  
  111. </TableRow>
  112. </TableLayout>
  113.  
  114. </RelativeLayout>

现在把对话框的代码写成 –

  1. public static void callAlert(String message,final Context context){
  2. final Dialog dialog = new Dialog(context);
  3. dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  4. dialog.setContentView(R.layout.customdialog_layout);
  5. dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
  6.  
  7. TextView tvTitle = (TextView) dialog.findViewById(R.id.textview_dialog_title);
  8. tvTitle.setText("MyApp..");
  9.  
  10. TextView tvText = (TextView) dialog.findViewById(R.id.textview_dialog_text);
  11. tvText.setText(message);
  12.  
  13. Button buttonDialogYes = (Button) dialog.findViewById(R.id.button_dialog_yes);
  14. buttonDialogYes.setOnClickListener(new OnClickListener() {
  15. public void onClick(View v) {
  16. // Do your stuff...
  17. dialog.dismiss();
  18. }
  19. });
  20.  
  21. Button buttonDialogNo = (Button) dialog.findViewById(R.id.button_dialog_no);
  22. buttonDialogNo.setOnClickListener(new OnClickListener() {
  23. public void onClick(View v) {
  24. // Do your stuff...
  25. dialog.dismiss();
  26. }
  27. });
  28. dialog.show();
  29. }

并称此方法为 –

  1. String message = "Your Message";
  2. callAlert(message,callingClass.this);

希望这将有助于您.

猜你在找的Android相关文章