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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

自定義控件(Dialog篇)

2019-11-09 18:51:56
字體:
供稿:網(wǎng)友

自定義控件實現(xiàn)方式

自定義控件實現(xiàn)方式原生Dialog實現(xiàn)方式代碼塊原生Dialog實現(xiàn)方式樣式一L提示框?qū)崿F(xiàn)方式一實現(xiàn)方式二原生Dialog實現(xiàn)方式樣式二L列表選項原生Dialog實現(xiàn)方式樣式三L單選對話框原生Dialog實現(xiàn)方式樣式三L多選對話框自定義Dialog實現(xiàn)方式代碼塊結(jié)束語

本文中初步討論了關(guān)于原生Dialog實現(xiàn)方式,自定義Dialog樣式實現(xiàn)以及注意細(xì)節(jié) 基于Android Studio API 23開發(fā) - 原生Dialog三種樣式實現(xiàn)方式 - 自定義Dialog實現(xiàn)方式 - 結(jié)束語


原生Dialog實現(xiàn)方式

代碼塊

原生Dialog實現(xiàn)方式樣式一L提示框:

這里寫圖片描述

實現(xiàn)方式一:
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器 builder.setTitle("提示"); //設(shè)置標(biāo)題 builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容 builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可 builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { //設(shè)置確定按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //關(guān)閉dialog } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //設(shè)置取消按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() {//設(shè)置忽略按鈕 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); //參數(shù)都設(shè)置完成了,創(chuàng)建并顯示出來 (三個按鈕本身是空作用的,需要人為賦值) builder.create().show();
實現(xiàn)方式二:
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參數(shù)設(shè)置 AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器 builder.setTitle("提示"); //設(shè)置標(biāo)題 builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容 builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可 builder.setPositiveButton("確認(rèn)",dialogOnclicListener); builder.setNegativeButton("取消", dialogOnclicListener); builder.setNeutralButton("忽略", dialogOnclicListener); builder.create().show();

原生Dialog實現(xiàn)方式樣式二L列表選項:

這里寫圖片描述

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

原生Dialog實現(xiàn)方式樣式三L單選對話框:

這里寫圖片描述

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

原生Dialog實現(xiàn)方式樣式三L多選對話框:

這里寫圖片描述

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

自定義Dialog實現(xiàn)方式

代碼塊

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);//設(shè)置相關(guān)布局 setContentView(view); // 設(shè)置窗口大小 Window mWindow = getWindow(); WindowManager.LayoutParams lp = mWindow.getAttributes(); if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {// 豎屏 //這里必須設(shè)置相關(guān)的高度和寬度,如果不設(shè)置將不會顯示出來 lp.width = getScreenWidth(context); lp.height = getScreenHeight(context)/2; } else { lp.width = getScreenHeight(context); } mWindow.setAttributes(lp); // 設(shè)置可以動畫 mWindow.setWindowAnimations(R.style.dialogAnimBottomAndFade); // 位置設(shè)置在底部--顯示位置(Gravity.CENTER)中間 mWindow.setGravity(Gravity.BOTTOM); // 設(shè)置可取消 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; }//如果想做相關(guān)點(diǎn)擊事件在初始化中進(jìn)行對象以及數(shù)據(jù)的初始化}

styles里的自定義Dialog配置

<!--自定義dialog--> <style name="DialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <!-- 邊框--> <item name="android:windowIsFloating">true</item> <!--是否浮現(xiàn)在activity之上--> <item name="android:windowIsTranslucent">false</item> <!--半透明--> <item name="android:windowNoTitle">true</item> <!--無標(biāo)題--> <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中創(chuàng)建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>

經(jīng)過數(shù)據(jù)配置之后可以顯示比較復(fù)雜的效果圖 這里寫圖片描述

這里寫圖片描述

結(jié)束語

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎城县| 宣汉县| 恩施市| 黄山市| 仁布县| 台州市| 武夷山市| 延庆县| 遂溪县| 大同市| 阳原县| 二手房| 云霄县| 凤庆县| 邻水| 莱西市| 南雄市| 阿坝| 名山县| 辽阳县| 漠河县| 凉山| 循化| 阳西县| 卢湾区| 文山县| 屏边| 阜康市| 金秀| 长治市| 崇礼县| 安康市| 昂仁县| 隆子县| 万州区| 赤城县| 建昌县| 阳谷县| 延川县| 介休市| 昆山市|