使用AlertDialog.Builder自定义对话框
jopen
11年前
android自定义对话框
说到对话框你肯定会想到AlertDialog.Builder。当然这次不是用AlertDialog.Builder来实现的!而是Dialog类
AlertDialog.Builder提供的方法有:
setTitle():给对话框设置title.
setIcon():给对话框设置图标。
setMessage():设置对话框的提示信息
setItems():设置对话框要显示的一个list,一般用于要显示几个命令时
setSingleChoiceItems():设置对话框显示一个单选的List
setMultiChoiceItems():用来设置对话框显示一系列的复选框。
setPositiveButton():给对话框添加”Yes”按钮。
setNegativeButton():给对话框添加”No”按钮。
那么在Dialog类怎样实现的呢?当然是layout啦,你可以自定义一个xml来布置你对话框
看看例子和源码吧
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" android:background="#000000"> …… </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) { super.onCreate(savedInstanceState); setContentView(R.layout.test_dialog); // 设置背景透明度 View ll = findViewById(R.id.ll_dialog); ll.getBackground().setAlpha(120);// 120为透明的比率 } }
获取layout作为view
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);
</span>