Android 常見三種彈框 在專案中的運用
一丶概述
彈框在Android專案中經常出現,常見的實現方法有三種:Dialog 彈框,Window彈框,Activity偽彈框。本文就說一說三種彈框的實現及在專案中的運用。
二丶演示圖
圖一為常見的三種彈框(文末上鍊接),圖二為專案中用到的Activity偽彈框
三丶正文
1.Dialog彈框
先看一篇一篇文章:
Dialog是系統自帶的彈框,然而常常因為UI不好看而遭嫌棄,常需要自定義public class MyDialog extends Dialog implements android.view.View.OnClickListener { private這裡就是:1.繫結佈局 2.設定監聽,監聽介面 主要說一下佈局裡的stytle(懸浮在Activity上,模糊顯示就是在這裡控制)Context mContext; private String mTitle; private String mDetail; private TextView mTextTitle; private TextView mTextDetail; private TextView mButtonYes; private TextView mButtonNo; private onClickInterface mOnclClickInterface; public MyDialog(Context context, String title,String detail) { super(context, R.style.MyDialogStyle); this.mContext = context; this.mTitle = title; this.mDetail = detail; } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState);initView(); } private void initView() { LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(R.layout.layout_dialog, null); setContentView(view); mButtonYes = (TextView) view.findViewById(R.id.dialog_yes); mButtonNo = (TextView) view.findViewById(R.id.dialog_no); mTextTitle = (TextView) view.findViewById(R.id.dialog_title); mTextDetail = (TextView) view.findViewById(R.id.dialog_detail); mTextTitle.setText(mTitle); mTextDetail.setText(mDetail); mButtonYes.setOnClickListener(this); mButtonNo.setOnClickListener(this); } public interface onClickInterface { public void clickYes(); public void clickNo(); } public void setOnClickInterface(onClickInterface onclClickInterface) { this.mOnclClickInterface = onclClickInterface; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.dialog_yes: mOnclClickInterface.clickYes(); break; case R.id.dialog_no: mOnclClickInterface.clickNo(); break; default: break; } } }
<style name="MyDialogStyle"> <item name="android:windowBackground">@android:color/transparent</item> <!--設定dialog的背景--> <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框為無--> <item name="android:windowNoTitle">true</item> <!--是否有title--> <item name="android:windowIsFloating">true</item> <!--是否浮現在activity之上--> <item name="android:windowIsTranslucent">false</item> <!--是否半透明--> <item name="android:windowContentOverlay">@null</item> <!--對話方塊是否有遮蓋,這個不設定的話,可能會出現邊框黑線--> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--動畫--> <item name="android:backgroundDimEnabled">true</item> <!-- 背景是否模糊顯示--> </style>
Dialog彈框一般用於,網路資料載入顯示,或互動較少的彈框(基本被新下拉重新整理控制元件SwipeRefreshLayout替代)
2.Window彈框
public class MyWindow { private Context mContext; private WindowManager mwinWindowManager; private View mView; private static boolean isShow = false; public MyWindow(Context context) { mContext = context.getApplicationContext(); } public void showMyWindow() { if (isShow) { return; } mwinWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); //設定WindowManager.LayoutParams的屬性 WindowManager.LayoutParams params = new WindowManager.LayoutParams(); //型別 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; //flags //如果設定了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,彈出的View沒焦點,收不到Back鍵的事件 //當按Back、Home鍵時,背景應用退出,彈出的view就可以懸浮在桌面了。 params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; params.format = PixelFormat.TRANSLUCENT; params.width = LayoutParams.MATCH_PARENT; params.height = LayoutParams.MATCH_PARENT; params.gravity = Gravity.CENTER; //初始化View mView = initView(mContext); //點選back鍵,關閉window mView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.d("wxx", "onKey"); switch (keyCode) { case KeyEvent.KEYCODE_BACK: Log.d("wxx", "onKey BACK"); hideMyWindow(); return true; default: return false; } } }); mwinWindowManager.addView(mView, params); isShow = true; } private View initView(Context context) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.layout_window, null); Button btnYes = (Button) view.findViewById(R.id.window_yes); btnYes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "Window yes!", Toast.LENGTH_LONG).show(); hideMyWindow(); } }); Button btnNO = (Button) view.findViewById(R.id.window_no); btnNO.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "Window No!", Toast.LENGTH_LONG).show(); hideMyWindow(); } }); //點選window視窗外圍,關閉window final View wView = view.findViewById(R.id.view_layout); view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); Rect rect = new Rect(); wView.getGlobalVisibleRect(rect); if (!rect.contains(x, y)) { hideMyWindow(); } return false; } }); return view; } public void hideMyWindow() { if (isShow && mView != null) { mwinWindowManager.removeView(mView); isShow = false; } } }
這個就厲害了,展現,隱藏,點選監聽都是自己寫的方法,原來點選視窗外關閉視窗是這樣實現的,是不是又學到了
然後是關於:
主要用於自定義控制元件,比如說下拉框:3.Activity偽彈框
public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_activity); } @Override public boolean onTouchEvent(MotionEvent event) { this.finish(); return true; } public void YesButton(View v) { this.finish(); Toast.makeText(getApplicationContext(), "Yes, Hunman is Activity", Toast.LENGTH_LONG).show(); } public void NoButton(View v) { this.finish(); Toast.makeText(getApplicationContext(), "No, Hunman is not Activity", Toast.LENGTH_LONG).show(); } }
簡單得不能再簡單,跳轉跳轉到另一個Activity
注意點Activity主題(控制Activity為彈框樣式):
<activity android:name="com.wuxianxi.hunman.smallwindows.MyActivity" android:theme="@style/MyActivityStyle" > </activity>
<style name="MyActivityStyle"> <item name="android:windowBackground">@android:color/transparent</item> <!--設定dialog的背景--> <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框為無--> <item name="android:windowNoTitle">true</item> <!--是否有title--> <item name="android:windowIsFloating">true</item> <!--是否浮現在activity之上--> <item name="android:windowIsTranslucent">true</item> <!--是否半透明--> <item name="android:windowContentOverlay">@null</item> <!--對話方塊是否有遮蓋,這個不設定的話,可能會出現邊框黑線--> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--動畫--> <item name="android:backgroundDimEnabled">true</item> <!-- 背景是否模糊顯示--> </style>Activity偽彈框最常用,用於互動,操作較複雜的彈框,如圖二
補充這裡可通過方法控制Activity彈框寬比
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** 設定寬度為螢幕的0.9*/ WindowManager windowManager = getWindowManager(); /* 獲取螢幕寬、高 */ Display display = windowManager.getDefaultDisplay(); /* 獲取對話方塊當前的引數值 */ WindowManager.LayoutParams p = getWindow().getAttributes(); /* 寬度設定為螢幕的0.9 */ p.width = (int) (display.getWidth() * 0.9); /* 設定透明度,0.0為完全透明,1.0為完全不透明 */ p.alpha = 0.95f; /* 設定佈局引數 */ getWindow().setAttributes(p); // getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, // ViewGroup.LayoutParams.WRAP_CONTENT); /* 設定點選彈框外部不可消失 */ setFinishOnTouchOutside(false); }
最後貼上MainActivity
public class MainActivity extends ActionBarActivity implements OnClickListener { private Button btnWindow; private Button btnDialog; private Button btnActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnWindow = (Button) findViewById(R.id.btn_window); btnDialog = (Button) findViewById(R.id.btn_dialog); btnActivity = (Button) findViewById(R.id.btn_activity); btnWindow.setOnClickListener(this); btnDialog.setOnClickListener(this); btnActivity.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_window: MyWindow myWindow = new MyWindow(this); myWindow.showMyWindow(); break; case R.id.btn_dialog: //注意下面第一個引數不能為getApplicationContext(),而應該是Activity, 因為辦有activity才能新增視窗 final MyDialog dialog = new MyDialog(MainActivity.this, "Hunman - Dialog", "Hunman is a Dialog\nYes or No!"); dialog.show(); dialog.setOnClickInterface(new MyDialog.onClickInterface() { @Override public void clickYes() { dialog.dismiss(); Toast.makeText(getApplicationContext(), "Yes, Hunman is Dialog", Toast.LENGTH_LONG).show(); } @Override public void clickNo() { dialog.dismiss(); Toast.makeText(getApplicationContext(), "Yes, Hunman is not Dialog", Toast.LENGTH_LONG).show(); } }); break; case R.id.btn_activity: Intent intent3 = new Intent(MainActivity.this, MyActivity.class); startActivity(intent3); break; default: break; } } }
相關推薦
Android 常見三種彈框 在專案中的運用
一丶概述 彈框在Android專案中經常出現,常見的實現方法有三種:Dialog 彈框,Window彈框,Activity偽彈框。本文就說一說三種彈框的實現及在專案中的運用。 二丶演示圖 圖一為常見的三種彈框(文末上鍊接),圖二為專案中用到的Activi
ios中的三種彈框
目前為止,已經知道3種IOS彈框: 1、系統彈框-底部彈框 UIActionSheet (1)用法:處理使用者非常危險的操作,比如登出系統等 (2)舉例: UIActionSheet *sheet = [[UIActionSheet alloc] initWit
angular2下的三種彈框(toaster sweetAlert modal) 及 特性模塊間的依賴關系
idt pri show type tab eba 變量 center 目的 三種彈框: 說明:下表僅作技術選擇的參考,紅色部分是容易出錯的,或者難點。 toaster sweetAlert modal package.json依賴 "angular2-toa
JS瀏覽器的三種彈框:
意見 基礎上 pro 基礎 模態 string 空字符 lin als 1.alert:使用alert彈框提示信息,最後都會被轉化為字符串輸出(因為調用了toString這個方法)。比如alert(1+1)彈出的結果應該是字符串形式的“2”。 2.Confirm:在aler
javascript 三種彈出對話框
ont 出現 進入 span 執行 confirm 輸入 str strong 第一種:alert()方法 第二種:confirm()方法 返回一個布爾值,根據返回的值可以執行相應操作。 第三種: prompt()方法 返回輸入的消息,或者其默認值提示框經常用於提示用戶在進
JavaScript中的三種彈出對話方塊
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
JS三種彈出框(alert、confirm、prompt)
<script> alert('hello');//彈框① 沒有返回值,返回undefined confirm("彈框②");//返回值為布林型別:true、false prompt("這是彈框③嗎?","是的");//帶輸入框的彈窗 </script>
javascript彈出瀏覽器的三種提示框:提示資訊框、確認框、輸入文字框
瀏覽器的三種提示框: alert()提示資訊框 confirm()提示確認框 prompt()提示輸入文字框 1、alert()提示資訊框 效果: 實現程式碼:
Android的幾種彈出框
appcompat eight err alert utf 最大值 ket 1.0 創建 項目效果圖: 新建一個項目,結構圖如下所示: activity_main.xml: <?xml version="1.0" encoding="
Js中三種彈出式訊息提醒的命令是什麼?(警告,確認,資訊輸入)
1、警告框alert,在js中直接運用alert("警告");2、確認框confirm。confirm() 方法用於顯示一個帶有指定訊息和 OK 及取消按鈕的對話方塊,根據使用者點選確認框上的按鈕返回t
可以在 JavaScript 中建立三種訊息框:警告框、確認框、提示框。
提示框 <html> <head> <script type="text/javascript"> function disp_prompt() { var name=prompt("請輸入您的名字","Bill Gates") if (name!=null
JavaScript中三種彈出式訊息提醒的命令是什麼?(如:警告,確認,資訊輸入)
1、警告框alert,在js中直接運用alert("警告"); 2、確認框confirm。 confirm() 方法用於顯示一個帶有指定訊息和 OK 及取消按鈕的對話方塊,根據使用者點選確認框上的按鈕返回true與false。 用法: if(confirm("確定要清空資料
js三種彈出框的方式
http://www.jb51.net/article/81376.htm 學習過js的小夥伴會發現,我們在一些例項中用到了alert()方法、prompt()方法、prompt()方法,他們都是在螢幕上彈出一個對話方塊,並且在上面顯示括號內的內容,使用這種方法使得
JavaScript的三種對話框是通過調用window對象的三個方法alert(),confirm()和prompt()
使用 運行 clas 都是 class 結果 腳本 但是 files 第一種:alert()方法 alert()方法是這三種對話框中最容易使用的一種,她可以用來簡單而明了地將alert()括號內的文本信息顯示在對話框中,我們將它稱為警示對話框,要顯示的信息放置在括號內,該對
常見三種存儲方式DAS、NAS、SAN的架構及比較
DAS NAS SAN存儲的分類 根據服務器類型分為: 封閉系統的存儲(封閉系統主要指大型機) 開放系統的存儲(開放系統指基於window Unix Linux等操作系統的服務器) 開放系統的存儲分為:內置存儲和外掛存儲 外掛存儲根據連接方式分為:直連式存儲(DAS)和網絡化存儲(FAS);網絡化存儲根
使用三種方式定位html中的元素
使用三種方式定位html中的元素1)使用三種方式定位html中的元素a)通過ID$("#ID")b)通過標簽名$("標簽名")c)通過樣式名$(".樣式名")2)dom中,需要判段查找到的元素是否為null,而jquery中,無需判段,因為jquer
夏天必備!筆記本常見三種降溫方法
不下來 優化 image block alt ima 效果 臺式機 筆記本電腦 由於筆記本“便攜性”和“高性能”的特點,筆記本的內部空間越來越小,但硬盤、CPU和其他的組件在運行過程中產生大量的熱量。筆記本CPU運行頻率越高,它產生的熱量就越多。即便筆記本內置了風扇和散
JS --- 三種彈窗
pre javascrip 三種 rip 彈窗 提示信息 -- 允許 ext alert:帶有提示信息的警告彈窗。 confirm:允許用戶選擇的彈窗 prompt:帶有提示信息的可輸入的對話框 <script type="text/javascript">
大三筆記(ssm專案中使用layui進行分頁)
本篇文章較為簡單,實現的功能是分頁。下面貼程式碼。 <script src="layui.js" charset="utf-8"></script> <!-- 注意:如果你直接複製所有程式碼到本地,上述js路徑需要改成你本地的 -->
Delphi三種彈視窗
1. ShowMessage('恭喜你!!!');