我们在部分机型上使用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