AlertDialog全屏问题

主要是全屏和遮罩层\背景色的问题

废话不多说,直接上代码:

    static AlertDialog dialog1;
    static AlertDialog.Builder dialogBuilder1;
    static boolean mIsCheck;
    public static void showRecoverPop(Activity activity, Handler handler) {// int type
        //注意此处设置的style属性关于背景色和遮罩层
        if (dialogBuilder1 == null)
                dialogBuilder1 = new AlertDialog.Builder((Context) activity,R.style.AlertDialogStyle);
        if (dialog1 == null)
            dialog1 = dialogBuilder1.create();

        dialog1.setCancelable(true);//点击空白和返回不消失false,消失true
        dialog1.setCanceledOnTouchOutside(true);
        dialog1.show();// show方法放在此处,如果先SetContentView之后在show会报错  
        WindowManager windowManager = activity.getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        Window window = dialog1.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();

        Point point = new Point();
        display.getSize(point);
       //注意此处的LayoutParams 大小关于弹窗的大小

       //最好动态获取屏幕的大小设置进去

        lp.gravity = Gravity.CENTER;
        lp.width = 1024;
        lp.height = 600;

        window.setAttributes(lp);
        window.setContentView(R.layout.air_hht_tip_layout);//activity_advanced
        // 因为setContentView的原因会一直隐藏键盘 所以做一下操作默认不显示,点击显示
        window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
        // 返回
        Button btnResert = (Button) window.findViewById(R.id.btn_suer);

        btnResert.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog1.dismiss();// 关闭dialog
            }
        });

    }

 

    Style部分代码

       
     <!-- 遮罩层关键属性 0`1-->
     <!-- <item name="android:backgroundDimAmount">0</item> -->
    <style name="AlertDialogStyle" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:backgroundDimAmount">0</item>
    </style>

 

   //动态获取屏幕大小

import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;

public class DisplayUtil {

   /** 屏幕宽度   */
   private static int DisplayWidthPixels = 0;
   /** 屏幕高度   */
   private static int DisplayheightPixels = 0;

   /**
     * 获取屏幕参数
     * @param context
     */
    private static void getDisplayMetrics(Context context) {
      DisplayMetrics dm = new DisplayMetrics();
      ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
      DisplayWidthPixels = dm.widthPixels;// 宽度
      DisplayheightPixels = dm.heightPixels;// 高度
   }

   /**
    * 获取屏幕宽度
    * @param context
    * @return
    */
   public static int getDisplayWidthPixels(Context context) {
      if (context == null) {
         return -1;
      }
      if (DisplayWidthPixels == 0) {
         getDisplayMetrics(context);
      }
      return DisplayWidthPixels;
   }

   /**
    * 获取屏幕高度
    * @param context
    * @return
    */
   public static int getDisplayheightPixels(Context context) {
      if (context == null) {
         return -1;
      }
      if (DisplayheightPixels == 0) {
         getDisplayMetrics(context);
      }
      return DisplayheightPixels;
   }

   /**
     * 将px值转换为dip或dp
     *
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将dip或dp值转换为px
     *
     * @param dipValue
     * @return
     */
    public static int dip2px(Context context, float dipValue) {
        if(context == null){
            return 0;
        }
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * 将px值转换为sp
     *
     * @param pxValue
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px
     * @param spValue
     * @param spValue   (DisplayMetrics类中属scaledDensity   
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }
}

 

 

 

 到这里就结束,拜拜

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章