国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自定義控件(Dialog篇)

2019-11-09 17:56:57
字體:
來源:轉載
供稿:網友

自定義控件實現方式

自定義控件實現方式原生Dialog實現方式代碼塊原生Dialog實現方式樣式一L提示框實現方式一實現方式二原生Dialog實現方式樣式二L列表選項原生Dialog實現方式樣式三L單選對話框原生Dialog實現方式樣式三L多選對話框自定義Dialog實現方式代碼塊結束語

本文中初步討論了關于原生Dialog實現方式,自定義Dialog樣式實現以及注意細節 基于Android Studio API 23開發 - 原生Dialog三種樣式實現方式 - 自定義Dialog實現方式 - 結束語


原生Dialog實現方式

代碼塊

原生Dialog實現方式樣式一L提示框:

這里寫圖片描述

實現方式一:
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 builder.setMessage("是否確認退出?"); //設置內容 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { //設置確定按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //關閉dialog } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //設置取消按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {//設置忽略按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); //參數都設置完成了,創建并顯示出來 (三個按鈕本身是空作用的,需要人為賦值) builder.create().show();
實現方式二:
DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { switch(which){ case Dialog.BUTTON_POSITIVE: break; case Dialog.BUTTON_NEGATIVE: break; case Dialog.BUTTON_NEUTRAL: break; } } }; //dialog參數設置 AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 builder.setMessage("是否確認退出?"); //設置內容 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setPositiveButton("確認",dialogOnclicListener); builder.setNegativeButton("取消", dialogOnclicListener); builder.setNeutralButton("忽略", dialogOnclicListener); builder.create().show();

原生Dialog實現方式樣式二L列表選項:

這里寫圖片描述

final String items[]={"路飛","娜美","索隆"}; //dialog參數設置 AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 //builder.setMessage("是否確認退出?"); //設置內容 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 //設置列表顯示,注意設置了列表顯示就不要設置builder.setMessage()了,否則列表不起作用。 builder.setItems(items,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //which屬性是items數組的下標 } }); builder.setPositiveButton("確定",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();

原生Dialog實現方式樣式三L單選對話框:

這里寫圖片描述

final String items[]={"男","女"}; AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setSingleChoiceItems(items,0,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //dialog.dismiss(); //setSingleChoiceItems參數中,0表示默認選中是第一個,如圖所示是默認選中“男”。 } }); builder.setPositiveButton("確定",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();

原生Dialog實現方式樣式三L多選對話框:

這里寫圖片描述

final String items[]={"喬巴","山治","烏索普"}; final boolean selected[]={true,false,true}; AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構造器 builder.setTitle("提示"); //設置標題 builder.setIcon(R.mipmap.ic_launcher);//設置圖標,圖片id即可 builder.setMultiChoiceItems(items,selected,new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // dialog.dismiss(); //which是點擊的item下標,在這里可以保留下標的狀態用于下次呈現 // android會自動根據你選擇的改變selected數組的值。 } }); builder.setPositiveButton("確定",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();

自定義Dialog實現方式

代碼塊

public class CouponDialog extends Dialog { PRivate Context context; @SuppressLint("InflateParams") public CouponDialog (final Context context){ super(context, R.style.DialogStyle); this.context=context; View view = LayoutInflater.from(context).inflate(R.layout.layout_cash_coupon_dialog, null);//設置相關布局 setContentView(view); // 設置窗口大小 Window mWindow = getWindow(); WindowManager.LayoutParams lp = mWindow.getAttributes(); if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {// 豎屏 //這里必須設置相關的高度和寬度,如果不設置將不會顯示出來 lp.width = getScreenWidth(context); lp.height = getScreenHeight(context)/2; } else { lp.width = getScreenHeight(context); } mWindow.setAttributes(lp); // 設置可以動畫 mWindow.setWindowAnimations(R.style.dialogAnimBottomAndFade); // 位置設置在底部--顯示位置(Gravity.CENTER)中間 mWindow.setGravity(Gravity.BOTTOM); // 設置可取消 setCancelable(true); setCanceledOnTouchOutside(true); }public static int getScreenWidth(Context context){ DisplayMetrics dm = new DisplayMetrics(); ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } public static int getScreenHeight(Context context){ DisplayMetrics dm = new DisplayMetrics(); ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.heightPixels; }//如果想做相關點擊事件在初始化中進行對象以及數據的初始化}

styles里的自定義Dialog配置

<!--自定義dialog--> <style name="DialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <!-- 邊框--> <item name="android:windowIsFloating">true</item> <!--是否浮現在activity之上--> <item name="android:windowIsTranslucent">false</item> <!--半透明--> <item name="android:windowNoTitle">true</item> <!--無標題--> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> </style><!--自定義dialog的動畫效果--> <style name="dialogAnim" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/dialog_show</item> <item name="android:windowExitAnimation">@anim/dialog_dismiss</item> </style>

anim中創建dialog_show和dialog_dismiss

dialog_show<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:duration="500" /></set> dialog_dismiss<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:toYDelta="100%p" android:duration="500" /></set>

經過數據配置之后可以顯示比較復雜的效果圖 這里寫圖片描述

這里寫圖片描述

結束語

對于原生Dialog的樣式無法進行重繪,并且根據Android Studio中使用的API不同,很可能會發生樣式的變化。結合多方面因素考慮還是需要自定義一個Dialog界面用于復寫比較好,不但可以保持頁面的整潔性,還可以保證頁面的統一性。


上一篇:Weex初學之旅

下一篇:aliases節點解析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善盟| 东兴市| 公安县| 永福县| 梨树县| 易门县| 科尔| 竹山县| 北辰区| 吉林市| 阜平县| 株洲市| 黑山县| 盐津县| 杭锦后旗| 郑州市| 梁河县| 杂多县| 汉沽区| 鄯善县| 延寿县| 横峰县| 扬州市| 建阳市| 黑龙江省| 建昌县| 台南县| 宕昌县| 呈贡县| 潢川县| 青浦区| 神池县| 彝良县| 玛曲县| 万州区| 宝鸡市| 阳山县| 河源市| 孟连| 柘城县| 朝阳县|