自定义Dialog
来源:互联网 发布:unix内核源码剖析 pdf 编辑:程序博客网 时间:2024/06/06 11:56
直接使用系统的dialog往往达不到自己想要的结果:
使用自定义的dialog,其实是很简单的自己上代码不啰嗦!
Dialog mDialog = new Dialog(MainActivity.this, R.style.MyDialog);
mDialog.setContentView(R.layout.dialogview1);
mDialog.show();
样式定义如下:
<style name="MyDialog" parent="@android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
就3行代码就可以使用自己定义的dialog,dialogview1 是由自己定义的,想使用啥背景就使用啥背景, 想是使用啥颜色就啥颜色,
想要几个按钮就几个按钮,反正一切自定义:布局如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="200dp"
android:background="@drawable/dialog_bg" >
<TextView
android:layout_centerHorizontal="true"
android:id="@+id/dialog_title"
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffffff"
android:textSize="30dp"
android:text="TITLE"
/>
<TextView
android:id="@+id/message"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_below="@id/dialog_title"
android:layout_height="200dp"
android:layout_width="300dp"
android:textSize="20dp"
android:text="ADBa"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="150dp"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/button_0"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="ONE"/>
<Button
android:id="@+id/button_1"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/button_0"
android:layout_marginLeft="5dp"
android:text="TWO"/>
<Button
android:id="@+id/button_2"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/button_1"
android:text="THREE"/>
</RelativeLayout>
</RelativeLayout>
把这些写到自己的代码上以后,运行结果肯定都已经看到了:
接下来加上3个button的监听事件即可:
Button one = (Button)mDialog.findViewById(R.id.button_0);
Button two = (Button)mDialog.findViewById(R.id.button_1);
Button three = (Button)mDialog.findViewById(R.id.button_2);
one.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "one is clicked", Toast.LENGTH_LONG).show();
}
});
two.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "two is clicked", Toast.LENGTH_LONG).show();
}
});
three.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "three is clicked", Toast.LENGTH_LONG).show();
}
});
再加上setMessage即可了
TextView mTextView = (TextView)mDialog.findViewById(R.id.message);
mTextView.setText("This is test");
最后在再加上自定位位置:
/*
* 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置,
* 可以直接调用getWindow(),表示获得这个Activity的Window
* 对象,这样这可以以同样的方式改变这个Activity的属性.
*/
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
/*
* lp.x与lp.y表示相对于原始位置的偏移.
* 当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略.
* 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略.
* 当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略.
* 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略.
* 当参数值包含Gravity.CENTER_HORIZONTAL时
* ,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动.
* 当参数值包含Gravity.CENTER_VERTICAL时
* ,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动.
* gravity的默认值为Gravity.CENTER,即Gravity.CENTER_HORIZONTAL |
* Gravity.CENTER_VERTICAL.
*
* 本来setGravity的参数值为Gravity.LEFT | Gravity.TOP时对话框应出现在程序的左上角,但在
* 我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了,
* Gravity.LEFT, Gravity.TOP, Gravity.BOTTOM与Gravity.RIGHT都是如此,据边界有一小段距离
*/
lp.x = 100; // 新位置X坐标
lp.y = 100; // 新位置Y坐标
lp.width = 300; // 宽度
lp.height = 300; // 高度
lp.alpha = 0.7f; // 透明度
// 当Window的Attributes改变时系统会调用此函数,可以直接调用以应用上面对窗口参数的更改,也可以用setAttributes
// dialog.onWindowAttributesChanged(lp);
dialogWindow.setAttributes(lp);
完成,简单的自定义dialog完成了,当然中间的大家可以封装的漂亮一些!
- 自定义Dialog---继承Dialog
- 自定义Dialog android Dialog
- 自定义Dialog
- 自定义Dialog
- 自定义dialog
- 自定义 Dialog
- 自定义dialog
- 自定义 dialog
- 自定义Dialog
- 自定义 Dialog
- 自定义Dialog
- 自定义dialog
- 自定义Dialog
- 自定义 Dialog
- 自定义Dialog
- 自定义Dialog
- 自定义Dialog
- 自定义Dialog
- Android开发(四) SDK配置环境变量
- 百度员工离职总结:如何做个好员工
- jquery 的validate 动态添加验证规则 及 jquery选择器 name带变量
- 当开发者产生一个伟大的想法之后应该做的10件事
- DIP,DP,PX,SP 单位2014.8.26
- 自定义Dialog
- [蓝牙]CoreBluetooth
- 指令
- jquery-工具-数组对象操作
- HTML5线性图表 图表数据区域可着色
- 9度oj 题目1006:ZOJ问题【递推】
- AIX交换内存管理
- Linux程序设计总结:前言
- 安装python包出错时的一般解决办法