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);
    }
}

 

 

 

 到這裏就結束,拜拜

 

 

 

 

 

 

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