Android中怎么自定义对话框

这期内容当中小编将会给大家带来有关Android中怎么自定义对话框,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了屏山免费建站欢迎大家使用!

Android自带的 AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog  可以用于简单的对话框显示。当还是有这些对话框不能满足应用需要的时候,这时就可以使用一些自定义的对话框。有多种方法可以实现自定义对话框。一是使用 Activity作为Dialog,可以通过设置Activity显示Dialog风格,使得该Activity在外观上和Dialog一致:显示在其它 Activity前面且半透明。

本例采用另外两种方法来使用自定义对话框,将用这个对话框来最为图形变换(Transform)的选项:

Primitive: Rectange, Ellipse,Text
Pen: Thin,Thick,Dashed
Brush: Solid, Gradient,Texture
Transform: Identity, Rotate, Scale, Shear
Rendering: Stroke, Fill, Stoke and Fill

首先在res\layout 下新建transformoption.xml 作为自定义对话框布局:

                                                                                                

一种方法是重新定制AlertDialog ,基本步骤和Android简明开发教程十七:Dialog 显示图像类似,但是在protected Dialog onCreateDialog(int id) ,需要重新设定Dialog的Content View并给RadioButton添加事件处理:

1    protected Dialog onCreateDialog(int id) { 2    final Dialog dialog; 3    switch (id) { 4    case OPTION_DIALOG: 5     LayoutInflater li 6       = LayoutInflater.from(this); 7     View optionView 8       = li.inflate(R.layout.transformoption, null); 9     AlertDialog.Builder optionDialog 10      = new AlertDialog.Builder(this); 11    optionDialog.setTitle("Options"); 12    optionDialog.setView(optionView); 13    dialog = optionDialog.create(); 14    RadioButton button = (RadioButton) optionView 15      .findViewById(R.id.radioRectangle); 16    button.setOnClickListener(new Button.OnClickListener() {  17    18     public void onClick(View v) { 19      primitiveIndex = PRIMITIVE_RECTANGLE; 20      drawImage(); 21      dialog.dismiss();  22    23     } 24    }); 25      26    ...  27    28    button = (RadioButton) optionView 29      .findViewById(R.id.radioStrokeFill); 30    button.setOnClickListener(new Button.OnClickListener() {  31    32     public void onClick(View v) { 33      renderingIndex = RENDERING_STROKE_AND_FILL; 34      drawImage(); 35      dialog.dismiss();  36    37     } 38    }); 39    return dialog; 40   }  41    42   return null;  43    44  }

第二种是通过派生Dialog ,定义了一个OptionDialog类作为Dialog子类。

1   class OptionDialog extends Dialog {  2     3    public OptionDialog(Context context) { 4     super(context); 5     // TODO Auto-generated constructor stub 6    } 7       8    protected void onCreate(Bundle savedInstanceState) { 9     super.onCreate(savedInstanceState); 10    setContentView(R.layout.transformoption); 11    setTitle("Options"); 12    RadioButton button 13       = (RadioButton) findViewById(R.id.radioRectangle); 14    button.setOnClickListener(new Button.OnClickListener() {  15    16     public void onClick(View v) { 17      primitiveIndex = PRIMITIVE_RECTANGLE; 18      drawImage(); 19      dismiss();  20    21     } 22    }); 23    ... 24    button = (RadioButton) findViewById(R.id.radioStrokeFill); 25    button.setOnClickListener(new Button.OnClickListener() {  26    27     public void onClick(View v) { 28      renderingIndex = RENDERING_STROKE_AND_FILL; 29      drawImage(); 30      dismiss();  31    32     } 33    }); 34   }  35    36  }

这两种方法在显示Dialog时有所不同:

1   private OptionDialog optionDialog; 2   static final private int OPTION_DIALOG = 1; 3     4   ... 5   optionDialog = new OptionDialog(this); 6     7   ... 8   @Override 9   public void onClick(View view) { 10   // optionDialog.show(); 11   showDialog(OPTION_DIALOG); 12    13  }

下面是完整代码:

1   public class Transform extends Graphics2DActivity 2     implements OnClickListener {  3     4    static int PRIMITIVE_RECTANGLE = 0; 5    static int PRIMITIVE_ELLIPSE = 1; 6    static int PRIMITIVE_TEXT = 2; 7    static int PEN_THIN = 0; 8    static int PEN_THICK = 1; 9    static int PEN_DASHED = 2; 10   static int BRUSH_SOLID = 0; 11   static int BRUSH_GRADIENT = 1; 12   static int BRUSH_TEXTURE = 2; 13   static int TRANSFORM_IDENTITY = 0; 14   static int TRANSFORM_ROTATE = 1; 15   static int TRANSFORM_SCALE = 2; 16   static int TRANSFORM_SHEAR = 3; 17   static int RENDERING_STROKE = 0; 18   static int RENDERING_FILL = 1; 19   static int RENDERING_STROKE_AND_FILL = 2; 20   int primitiveIndex; 21   int penIndex; 22   int brushIndex; 23   int transformIndex; 24   int renderingIndex; 25   int[] rgbData; 26   int bitmapWidth; 27   int bitmapHeight;  28    29   class OptionDialog extends Dialog {  30    31    public OptionDialog(Context context) { 32     super(context); 33     // TODO Auto-generated constructor stub 34    }  35    36    protected void onCreate(Bundle savedInstanceState) { 37     super.onCreate(savedInstanceState); 38     setContentView(R.layout.transformoption); 39     setTitle("Options"); 40     RadioButton button 41        = (RadioButton) findViewById(R.id.radioRectangle); 42     button.setOnClickListener(new Button.OnClickListener() {  43    44      public void onClick(View v) { 45       primitiveIndex = PRIMITIVE_RECTANGLE; 46       drawImage(); 47       dismiss();  48    49      } 50     }); 51     button = (RadioButton) findViewById(R.id.radioEllipse); 52     button.setOnClickListener(new Button.OnClickListener() {  53    54      public void onClick(View v) { 55       primitiveIndex = PRIMITIVE_ELLIPSE; 56       drawImage(); 57       dismiss();  58    59      } 60     }); 61     button = (RadioButton) findViewById(R.id.radioText); 62     button.setOnClickListener(new Button.OnClickListener() {  63    64      public void onClick(View v) { 65       primitiveIndex = PRIMITIVE_TEXT; 66       drawImage(); 67       dismiss();  68    69      } 70     });  71    72     button = (RadioButton) findViewById(R.id.radioThin); 73     button.setOnClickListener(new Button.OnClickListener() {  74    75      public void onClick(View v) { 76       penIndex = PEN_THIN; 77       drawImage(); 78       dismiss();  79    80      } 81     });  82    83     button = (RadioButton) findViewById(R.id.radioThick); 84     button.setOnClickListener(new Button.OnClickListener() {  85    86      public void onClick(View v) { 87       penIndex = PEN_THICK; 88       drawImage(); 89       dismiss();  90    91      } 92     });  93    94     button = (RadioButton) findViewById(R.id.radioDashed); 95     button.setOnClickListener(new Button.OnClickListener() {  96    97      public void onClick(View v) { 98       penIndex = PEN_DASHED; 99       drawImage(); 100      dismiss();  101   102     } 103    });  104   105    button = (RadioButton) findViewById(R.id.radioSolid); 106    button.setOnClickListener(new Button.OnClickListener() {  107   108     public void onClick(View v) { 109      brushIndex = BRUSH_SOLID; 110      drawImage(); 111      dismiss();  112   113     } 114    });  115   116    button = (RadioButton) findViewById(R.id.radioGradient); 117    button.setOnClickListener(new Button.OnClickListener() {  118   119     public void onClick(View v) { 120      brushIndex = BRUSH_GRADIENT; 121      drawImage(); 122      dismiss();  123   124     } 125    });  126   127    button = (RadioButton) findViewById(R.id.radioTexture); 128    button.setOnClickListener(new Button.OnClickListener() {  129   130     public void onClick(View v) { 131      brushIndex = BRUSH_TEXTURE; 132      drawImage(); 133      dismiss();  134   135     } 136    });  137   138    button = (RadioButton) findViewById(R.id.radioIdentity); 139    button.setOnClickListener(new Button.OnClickListener() {  140   141     public void onClick(View v) { 142      transformIndex = TRANSFORM_IDENTITY; 143      drawImage(); 144      dismiss();  145   146     } 147    });  148   149    button = (RadioButton) findViewById(R.id.radioRotate); 150    button.setOnClickListener(new Button.OnClickListener() {  151   152     public void onClick(View v) { 153      transformIndex = TRANSFORM_ROTATE; 154      drawImage(); 155      dismiss();  156   157     } 158    });  159   160    button = (RadioButton) findViewById(R.id.radioScale); 161    button.setOnClickListener(new Button.OnClickListener() {  162   163     public void onClick(View v) { 164      transformIndex = TRANSFORM_SCALE; 165      drawImage(); 166      dismiss();  167   168     } 169    });  170   171    button = (RadioButton) findViewById(R.id.radioShear); 172    button.setOnClickListener(new Button.OnClickListener() {  173   174     public void onClick(View v) { 175      transformIndex = TRANSFORM_SHEAR; 176      drawImage(); 177      dismiss();  178   179     } 180    });  181   182    button = (RadioButton) findViewById(R.id.radioStroke); 183    button.setOnClickListener(new Button.OnClickListener() {  184   185     public void onClick(View v) { 186      renderingIndex = RENDERING_STROKE; 187      drawImage(); 188      dismiss();  189   190     } 191    });  192   193    button = (RadioButton) findViewById(R.id.radioFill); 194    button.setOnClickListener(new Button.OnClickListener() {  195   196     public void onClick(View v) { 197      renderingIndex = RENDERING_FILL; 198      drawImage(); 199      dismiss();  200   201     } 202    });  203   204    button = (RadioButton) findViewById(R.id.radioStrokeFill); 205    button.setOnClickListener(new Button.OnClickListener() {  206   207     public void onClick(View v) { 208      renderingIndex = RENDERING_STROKE_AND_FILL; 209      drawImage(); 210      dismiss();  211   212     } 213    }); 214   }  215   216  }  217   218  private OptionDialog optionDialog; 219  private Button btnOptions;  220   221  static final private int OPTION_DIALOG = 1;  222   223  private AffineTransform at = new AffineTransform(); 224  private int w, h; 225  private IShape shapes[] = new IShape[3];  226   227  private boolean firstTime = true; 228  private FontEx font = FontEx.getSystemFont();  229   230  @Override 231  protected void drawImage() { 232   drawTransform();  233   234  }  235   236  protected Dialog onCreateDialog(int id) { 237   final Dialog dialog; 238   switch (id) { 239   case OPTION_DIALOG: 240    LayoutInflater li 241      = LayoutInflater.from(this); 242    View optionView 243      = li.inflate(R.layout.transformoption, null); 244    AlertDialog.Builder optionDialog 245      = new AlertDialog.Builder(this); 246    optionDialog.setTitle("Options"); 247    optionDialog.setView(optionView); 248    dialog = optionDialog.create(); 249    RadioButton button = (RadioButton) optionView 250      .findViewById(R.id.radioRectangle); 251    button.setOnClickListener(new Button.OnClickListener() {  252   253     public void onClick(View v) { 254      primitiveIndex = PRIMITIVE_RECTANGLE; 255      drawImage(); 256      dialog.dismiss();  257   258     } 259    }); 260    button = (RadioButton) 261        optionView.findViewById(R.id.radioEllipse); 262    button.setOnClickListener(new Button.OnClickListener() {  263   264     public void onClick(View v) { 265      primitiveIndex = PRIMITIVE_ELLIPSE; 266      drawImage(); 267      dialog.dismiss();  268   269     } 270    }); 271    button = (RadioButton) 272      optionView.findViewById(R.id.radioText); 273    button.setOnClickListener(new Button.OnClickListener() {  274   275     public void onClick(View v) { 276      primitiveIndex = PRIMITIVE_TEXT; 277      drawImage(); 278      dialog.dismiss();  279   280     } 281    });  282   283    button = (RadioButton) 284       optionView.findViewById(R.id.radioThin); 285    button.setOnClickListener(new Button.OnClickListener() {  286   287     public void onClick(View v) { 288      penIndex = PEN_THIN; 289      drawImage(); 290      dialog.dismiss();  291   292     } 293    });  294   295    button = (RadioButton) 296       optionView.findViewById(R.id.radioThick); 297    button.setOnClickListener(new Button.OnClickListener() {  298   299     public void onClick(View v) { 300      penIndex = PEN_THICK; 301      drawImage(); 302      dialog.dismiss();  303   304     } 305    });  306   307    button = (RadioButton) 308        optionView.findViewById(R.id.radioDashed); 309    button.setOnClickListener(new Button.OnClickListener() {  310   311     public void onClick(View v) { 312      penIndex = PEN_DASHED; 313      drawImage(); 314      dialog.dismiss();  315   316     } 317    });  318   319    button = (RadioButton) 320        optionView.findViewById(R.id.radioSolid); 321    button.setOnClickListener(new Button.OnClickListener() {  322   323     public void onClick(View v) { 324      brushIndex = BRUSH_SOLID; 325      drawImage(); 326      dialog.dismiss();  327   328     } 329    });  330   331    button = (RadioButton) 332        optionView.findViewById(R.id.radioGradient); 333    button.setOnClickListener(new Button.OnClickListener() {  334   335     public void onClick(View v) { 336      brushIndex = BRUSH_GRADIENT; 337      drawImage(); 338      dialog.dismiss();  339   340     } 341    });  342   343    button = (RadioButton) 344        optionView.findViewById(R.id.radioTexture); 345    button.setOnClickListener(new Button.OnClickListener() {  346   347     public void onClick(View v) { 348      brushIndex = BRUSH_TEXTURE; 349      drawImage(); 350      dialog.dismiss();  351   352     } 353    });  354   355    button = (RadioButton) 356        optionView.findViewById(R.id.radioIdentity); 357    button.setOnClickListener(new Button.OnClickListener() {  358   359     public void onClick(View v) { 360      transformIndex = TRANSFORM_IDENTITY; 361      drawImage(); 362      dialog.dismiss();  363   364     } 365    });  366   367    button = (RadioButton) 368        optionView.findViewById(R.id.radioRotate); 369    button.setOnClickListener(new Button.OnClickListener() {  370   371     public void onClick(View v) { 372      transformIndex = TRANSFORM_ROTATE; 373      drawImage(); 374      dialog.dismiss();  375   376     } 377    });  378   379    button = (RadioButton) 380        optionView.findViewById(R.id.radioScale); 381    button.setOnClickListener(new Button.OnClickListener() {  382   383     public void onClick(View v) { 384      transformIndex = TRANSFORM_SCALE; 385      drawImage(); 386      dialog.dismiss();  387   388     } 389    });  390   391    button = (RadioButton) 392       optionView.findViewById(R.id.radioShear); 393    button.setOnClickListener(new Button.OnClickListener() {  394   395     public void onClick(View v) { 396      transformIndex = TRANSFORM_SHEAR; 397      drawImage(); 398      dialog.dismiss();  399   400     } 401    });  402   403    button = (RadioButton) 404        optionView.findViewById(R.id.radioStroke); 405    button.setOnClickListener(new Button.OnClickListener() {  406   407     public void onClick(View v) { 408      renderingIndex = RENDERING_STROKE; 409      drawImage(); 410      dialog.dismiss();  411   412     } 413    });  414   415    button = (RadioButton) 416        optionView.findViewById(R.id.radioFill); 417    button.setOnClickListener(new Button.OnClickListener() {  418   419     public void onClick(View v) { 420      renderingIndex = RENDERING_FILL; 421      drawImage(); 422      dialog.dismiss();  423   424     } 425    });  426   427    button = (RadioButton) optionView 428      .findViewById(R.id.radioStrokeFill); 429    button.setOnClickListener(new Button.OnClickListener() {  430   431     public void onClick(View v) { 432      renderingIndex = RENDERING_STROKE_AND_FILL; 433      drawImage(); 434      dialog.dismiss();  435   436     } 437    }); 438    return dialog; 439   }  440   441   return null;  442   443  }  444   445  public void onCreate(Bundle savedInstanceState) { 446   super.onCreate(savedInstanceState); 447   setContentView(R.layout.transform); 448   graphic2dView = (GuidebeeGraphics2DView) 449      findViewById(R.id.graphics2dview); 450   btnOptions = (Button) findViewById(R.id.btnOption); 451   btnOptions.setOnClickListener(this); 452   shapes[0] = new Rectangle(0, 0, 100, 100); 453   shapes[1] = new Ellipse(0, 0, 100, 100); 454   IShape[] fontShapes = font.getGlyphArray(96, 455          "TEXT".toCharArray(), 0, 456     4, FontEx.TEXT_DIR_LR); 457   shapes[2] = new Area(fontShapes[0]); 458   for (int i = 1; i < fontShapes.length; i++) { 459    ((Area) shapes[2]).add(new Area(fontShapes[i])); 460   } 461   Bitmap bitmap = BitmapFactory.decodeResource( 462           getResources(), 463     R.drawable.brick); 464   bitmapWidth = bitmap.getWidth(); 465   bitmapHeight = bitmap.getHeight();  466   467   rgbData = new int[bitmapWidth * bitmapHeight]; 468   bitmap.getPixels(rgbData, 0, bitmapWidth, 0, 0, 469      bitmapWidth, 470     bitmapHeight); 471   w = SharedGraphics2DInstance.CANVAS_WIDTH; 472   h = SharedGraphics2DInstance.CANVAS_HEIGHT; 473   optionDialog = new OptionDialog(this);  474   475  }  476   477  private void setTrans(int transIndex) { 478   // Sets the AffineTransform. 479   switch (transIndex) { 480   case 0: 481    at.setToIdentity(); 482    at.translate(w / 2, h / 2); 483    break; 484   case 1: 485    at.rotate(Math.toRadians(45)); 486    break; 487   case 2: 488    at.scale(0.5, 0.5); 489    break; 490   case 3: 491    at.shear(0.5, 0.0); 492    break; 493   } 494  }  495   496  private void drawTransform() { 497   graphics2D.clear(Color.WHITE); 498   graphics2D.Reset(); 499   setTrans(transformIndex); 500   graphics2D.setAffineTransform(at);  501   502   // Initialize the transform. 503   if (firstTime) { 504    at.setToIdentity(); 505    at.translate(w / 2, h / 2);  506   507    firstTime = false; 508   }  509   510   // Sets the Stroke. 511   Pen pen = null;  512   513   switch (penIndex) { 514   case 0: 515    pen = new Pen(Color.BLACK, 1); 516    break; 517   case 1: 518    pen = new Pen(Color.BLACK, 8); 519    break; 520   case 2: { 521    int dash[] = { 10, 10 }; 522    pen = new Pen(Color.BLACK, 1, Pen.CAP_BUTT, 523      Pen.JOIN_MITER, dash, 0); 524   } 525    break; 526   }  527   528   // Sets the Paint. 529   Brush brush = null;  530   531   switch (brushIndex) { 532   case 0: 533    brush = new SolidBrush(Color.BLUE); 534    break; 535   case 1: { 536    int[] fractions = new int[] { 13, 242 }; 537    Color[] colors = new Color[] { new Color(0xffff6600), 538      new Color(0xffffff66) }; 539    brush = new LinearGradientBrush(50, 50, 150, 540      125, fractions, 541      colors, Brush.REPEAT); 542   }  543   544    break; 545   case 2: 546    try {  547   548     brush = new TextureBrush(rgbData, 549       bitmapWidth, bitmapHeight); 550    } catch (Exception e) { 551    } 552    break; 553   }  554   555   // Sets the Shape. 556   IShape shape = shapes[primitiveIndex]; 557   Rectangle r = shape.getBounds(); 558   AffineTransform toCenterAt = new AffineTransform(); 559   toCenterAt.concatenate(at); 560   toCenterAt.translate(-(r.width / 2), -(r.height / 2));  561   562   graphics2D.setAffineTransform(toCenterAt); 563   // Sets the rendering method. 564   switch (renderingIndex) { 565   case 0: 566    graphics2D.setDefaultPen(pen); 567    graphics2D.draw(null, shape); 568    break; 569   case 1: 570    graphics2D.setDefaultBrush(brush); 571    graphics2D.fill(null, shape); 572    break; 573   case 2: 574    graphics2D.setPenAndBrush(pen, brush); 575    graphics2D.fill(null, shape); 576    graphics2D.draw(null, shape); 577    break; 578   } 579   graphic2dView.refreshCanvas();  580   581  }  582   583  @Override 584  public void onClick(View view) { 585   // optionDialog.show(); 586   showDialog(OPTION_DIALOG);  587   588  } 589 }

上述就是小编为大家分享的Android中怎么自定义对话框了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


分享文章:Android中怎么自定义对话框
标题来源:http://myzitong.com/article/pjigcp.html