您的位置:首页 > 移动开发 > Android开发

android自定义Dialog

2016-08-11 17:18 253 查看
我们在部分机型上使用Toast的时候会出现Toast不显示的问题

其中一种解决办法就是使用自定义的Dialog代替

在使用Dialog在的时候,其中有一些让很多人头疼的问题

1.dialog显示的位置如何控制

2.dialog显示的时间如何控制

3.dialog显示的时候Activity的背景会变暗,如何设置dialog显示的时候Activity的背景不变暗

注意:自定义dialog的布局位置设置和popuwindow的类似http://blog.csdn.net/wei_chong_chong/article/details/51057559

根节点设置宽高推荐使用Match_parent,

第一步:

定义一个dialog的布局mydialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:gravity="center"
android:orientation="vertical" >

<TextView
android:id="@+id/myDialogTv"
android:layout_width="120dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:background="@android:color/holo_blue_light"
android:gravity="center"
android:textColor="@android:color/black"
android:text="dialog!"
android:textSize="13sp" />

</LinearLayout>第二步
自定义dialog的显示样式res/values/styles.xml

<style name="mydialogstyle" parent="@android:style/Theme.Dialog">
<item name="android:backgroundDimEnabled">false</item><!--activity不变暗-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsTranslucent">false</item><!--半透明-->
<item name="android:windowBackground">@android:color/transparent</item><!--dialog显示时 Activity的背景颜色 -->
</style>

第三步在activity中使用就行了
public void showMyDialog(Context context,String msg){
//第一种创建方法
AlertDialog.Builder builder= new AlertDialog.Builder(context,R.style.mydialogstyle);//创建buider
AlertDialog dialog = builder.create();
//第二种创建方法
//Dialog dialog = new Dialog(context, R.style.mydialogstyle);
dialog.show();//这一句话一定要紧跟着new创建 之后不然会报错
//下面对dialog的所有配置代码一定要放在dialog.show();之后,不然会报错(我的手机是这样的,不知道你们的是不是)
Window dialogWindow = dialog.getWindow();
dialogWindow.setContentView(R.layout.mydialog);
TextView tv_title = (TextView) dialogWindow.findViewById(R.id.myDialogTv);
tv_title.setText("msg");
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.alpha = 1.0f;//设置Dialog的透明度
lp.x = 0;
lp.y= dip2px(context, 180);//把dp转换为sp,这里的lp.x/lp.y 是相对于原位置的偏移量
dialogWindow.setAttributes(lp);

}
public static int dip2px(Context context, float dpValue) { //把dp转换为px
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}

参考:http://blog.csdn.net/alrdy/article/details/8099438#
           http://www.cnblogs.com/angeldevil/archive/2012/03/31/2426242.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: