android自定义对话框

说到对话框你肯定会想到AlertDialog.Builder。当然这次不是用AlertDialog.Builder来实现的!而是Dialog类

AlertDialog.Builder提供的方法有:
setTitle():给对话框设置title.
setIcon():给对话框设置图标。
setMessage():设置对话框的提示信息
setItems():设置对话框要显示的一个list,一般用于要显示几个命令时
setSingleChoiceItems():设置对话框显示一个单选的List
setMultiChoiceItems():用来设置对话框显示一系列的复选框。
setPositiveButton():给对话框添加”Yes”按钮。
setNegativeButton():给对话框添加”No”按钮。
那么在Dialog类怎样实现的呢?当然是layout啦,你可以自定义一个xml来布置你对话框
看看例子和源码吧

package com.hl;
import android.app.Activity;
 import android.app.Dialog;
 import android.content.Context;
 import android.os.Bundle;
 import android.view.Gravity;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.Button;
 public class MyDialog extends Activity implements android.view.View.OnClickListener {
  Button btn1=null;
     Button btn2=null;
     Button btn3=null;
  @Override
   public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          btn1=(Button)findViewById(R.id.b1);
          btn2=(Button)findViewById(R.id.b2);
          btn3=(Button)findViewById(R.id.b3);
          btn1.setOnClickListener(this);
          btn2.setOnClickListener(this);
          btn3.setOnClickListener(this);
      }
  @Override
  public void onClick(View v) {
   switch(v.getId()){
         case R.id.b1:
             break;
         case R.id.b2:
         case R.id.b3:
             new MyDialogs(this).setDisplay();
             break;
         default:
   
  }
 }
 class MyDialogs extends Dialog implements android.view.View.OnClickListener{
  private Button b1;
     private Window window=null;
    
     public MyDialogs(Context context){
         super(context);
     }
     public void setDisplay(){
      setContentView(R.layout.dialog);//设置对话框的布局
      b1=(Button)findViewById(R.id.clo);
      b1.setOnClickListener(this);
      setProperty();
         setTitle("自定义对话框");//设定对话框的标题
         show();//显示对话框  
     }
      //要显示这个对话框,只要创建该类对象.然后调用该函数即可.
     public void setProperty(){
          window=getWindow();//   得到对话框的窗口.
          WindowManager.LayoutParams wl = window.getAttributes();
          wl.x =0;//这两句设置了对话框的位置.0为中间
          wl.y =180;
          wl.alpha=0.6f;//这句设置了对话框的透明度
          wl.gravity=Gravity.BOTTOM;        
          window.setAttributes(wl);
     }
   @Override
   public void onClick(View v) {
    dismiss();//取消   
   }
   }
 }


对话框透明

1、定义style:

<resources>
   <style
         name="dialog_fullscreen">
         <item
             name="android:windowFullscreen">true</item>
         <item
             name="android:windowNoTitle">true</item>
         <item
             name="android:windowBackground">@android:color/transparent</item>
     </style>
 </resources>

2、定义layout文件:test_dialog.xml

<LinearLayout
     android:id="@+id/ll_dialog"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_gravity="center"
    ……
</LinearLayout>

3、代码中设置:

public class TestDialog extends Dialog
{
   public TestDialog(Context context)
     {
         super(context, R.style.dialog_fullscreen);
         // TODO Auto-generated constructor stub
       @Override
     protected void onCreate(Bundle savedInstanceState)
     {
              
       // 设置背景透明度
         View ll = findViewById(R.id.ll_dialog);
         ll.getBackground().setAlpha(120);// 120为透明的比率
    }


获取layout作为view


方法一:取得LayoutInflater 

layoutInflater = getLayoutInflater(); 

          

方法二: 

layoutInflater = LayoutInflater.from(this); 

          

方法三: 

layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);



做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片。直接用R.drawable.?无法调用。查了好多地方最后找到了个方法,分享给大家,希望有帮助。

主要由两种方法,个人建议第二种。

1. 不把图片放在res/drawable下,而是存放在src某个package中(如:com.drawable.resource),这种情况下的调用方法为:

String path = "com/drawable/resource/imageName.png";

InputStream is = getClassLoader().getResourceAsStream(path);

Drawable.createFromStream(is, "src");


2. 如果还是希望直接使用res/drawable中的图片,就需要通过下面的方法了:

假设创建工程的时候,填写的package名字为:com.test.image

int resID = getResources().getIdentifier("imageName", "drawable", "com.test.image");

Drawable image = getResources().getDrawable(resID);