Android 自定義dialog樣式位置大小,判斷是否第一次登陸

        本文是寫了一個是否爲第一次登錄的一個自定義Dialog,附上demo鏈接:demo下載地址

        




代碼如下:

package com.example.customdialogposition;

import android.app.Activity;
import android.app.Dialog;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {

	private Dialog mDialog;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		firstStart();
	}

	private void firstStart() {
		SharedPreferences sharedPreferences = this.getSharedPreferences(
				"frist", MODE_PRIVATE);// 第一運行存爲true
		boolean isFirstRun = sharedPreferences.getBoolean("isFirstRun", true);
		Editor editor = sharedPreferences.edit();
		if (isFirstRun) {// 判斷是不是第一次運行
			mDialog = new Dialog(this);// 新建一個dialog
			View myView = LayoutInflater.from(MainActivity.this).inflate(
					R.layout.activity_main, null);// 把佈局文件填充進去
			mDialog.setContentView(myView);
			mDialog.setCanceledOnTouchOutside(true);// ture的時候爲dialog不消失,false爲消失

			/*
			 * 獲取對話框的窗口對象及參數對象以修改對話框的佈局設置,
			 * 可以直接調用getWindow(),表示獲得這個Activity的Window
			 * 對象,這樣這可以以同樣的方式改變這個Activity的屬性.
			 */
			Window mDialogWindow = mDialog.getWindow();
			WindowManager.LayoutParams lp = mDialogWindow.getAttributes();// 獲取對話框當前的參數值

			Display mDisplay = getWindow().getWindowManager()
					.getDefaultDisplay();// 獲取屏幕寬、高用

			mDialog.show();// 顯示Dialog

			// 1 在dialog show下面加上這些屬性會使dialog與屏幕一樣大
			lp.width = (int) (mDisplay.getWidth());
			lp.height = (int) (mDisplay.getHeight());// 設置寬高
			mDialogWindow.setAttributes(lp);
			// 上面部分爲寬高度一樣

			// 2 這個是設置dialog相對與屏幕的位置,水平居中豎直居 頂
			mDialogWindow.setGravity(Gravity.CENTER_HORIZONTAL | 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.
			 */
			// 3
			lp.x = 100; // 新位置X座標
			lp.y = 100; // 新位置Y座標
			lp.width = 300; // 寬度
			lp.height = 300; // 高度
			lp.alpha = 0.7f; // 透明度

			// 當Window的Attributes改變時系統會調用此函數,可以直接調用以應用上面對窗口參數的更改,也可以用setAttributes
			// dialog.onWindowAttributesChanged(lp);
			// mDialogWindow.setAttributes(lp);

			// 4 將對話框的大小按屏幕大小的百分比設置
			lp.height = (int) (mDisplay.getHeight() * 0.6); // 高度設置爲屏幕的0.6
			lp.width = (int) (mDisplay.getWidth() * 0.65); // 寬度設置爲屏幕的0.95
			// mDialogWindow.setAttributes(lp);

			myView.setOnClickListener(new OnClickListener() {// 點擊事件

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					setContentView(R.layout.activity_main);// 加載佈局
					mDialog.dismiss();// Dialog消失
				}
			});

			editor.putBoolean("isFirstRun", false);// 第一次運行存儲false
			editor.commit();// 提交
		} else {
			setContentView(R.layout.activity_main);
		}
	}

}

附上效果圖




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