成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

android自定義彈出框樣式的實現方法

瀏覽:215日期:2022-09-23 18:49:41

前言:

做項目時,感覺android自帶的彈出框樣式比較丑,很多應用都是自己做的彈出框,這里也試著自己做了一個。

廢話不說先上圖片:

android自定義彈出框樣式的實現方法

實現機制

1.先自定義一個彈出框的樣式

2.自己實現CustomDialog類,繼承自Dialog,實現里面方法,在里面加載自定義樣式的彈出框;

3.使用時,與使用Dialog一樣

具體代碼

dialog_normal_layout.xml樣式文件

<?xml version='1.0' encoding='utf-8'?><FrameLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='fill_parent' android:layout_height='fill_parent' android:clickable='true' android:orientation='vertical' android:padding='20.0dip' > <LinearLayout android:layout_width='fill_parent' android:layout_height='wrap_content' android:layout_gravity='center' android:background='@drawable/bg_bombbox' android:orientation='vertical' > <TextView android: android:layout_width='fill_parent' android:layout_height='40.0dip' android:gravity='center' android:text='@string/title_alert' android:visibility='visible' /> <LinearLayout android: android:layout_width='fill_parent' android:layout_height='wrap_content' android:gravity='center' ><TextViewandroid: android:layout_width='fill_parent'android:layout_height='wrap_content'android:gravity='left|center'android:lineSpacingMultiplier='1.5'android:minHeight='120.0dip'android:paddingBottom='15.0dip'android:paddingLeft='20.0dip'android:paddingRight='20.0dip'android:paddingTop='15.0dip' /> </LinearLayout> <View android:layout_width='fill_parent' android:layout_height='1.0px' android:background='#ffd0d0d0' /> <LinearLayout android:layout_width='fill_parent' android:layout_height='60.0dip' android:layout_gravity='bottom' android:background='@drawable/dialog_bottom_bg' android:gravity='center' android:orientation='horizontal' > <Buttonandroid: android:layout_width='114.0dip'android:layout_height='40.0dip'android:background='@drawable/btn_ok_selector'android:gravity='center'android:text='@string/ok' /> <Buttonandroid: android:layout_width='114.0dip'android:layout_height='40.0dip'android:layout_marginLeft='20.0dip'android:background='@drawable/btn_cancel_selector'android:gravity='center'android:text='@string/cancel' /> </LinearLayout> </LinearLayout> </FrameLayout>

其中引用的樣式文件styles.xml

<?xml version='1.0' encoding='utf-8'?><resources xmlns:android='http://schemas.android.com/apk/res/android'> <style name='AppBaseTheme' parent='android:Theme.Light'></style> <style name='AppTheme' parent='AppBaseTheme'></style> <style name='text_18_ffffff'> <item name='android:textSize'>18.0dip</item> <item name='android:textColor'>#ffffffff</item> </style> <style name='text_16_666666'> <item name='android:textSize'>16.0dip</item> <item name='android:textColor'>#ff666666</item> </style> <style name='sdw_white'> <item name='android:shadowColor'>#7fffffff</item> <item name='android:shadowDx'>0.0</item> <item name='android:shadowDy'>0.65</item> <item name='android:shadowRadius'>1.0</item> </style> <style name='sdw_79351b'> <item name='android:shadowColor'>#ff79351b</item> <item name='android:shadowDx'>0.0</item> <item name='android:shadowDy'>1.0</item> <item name='android:shadowRadius'>1.0</item> </style> <style name='text_15_ffffff_sdw' parent='@style/sdw_79351b'> <item name='android:textSize'>15.0dip</item> <item name='android:textColor'>#ffffffff</item> </style> <style name='text_15_666666_sdw' parent='@style/sdw_white'> <item name='android:textSize'>15.0dip</item> <item name='android:textColor'>#ff666666</item> </style> <style name='Dialog' parent='android:style/Theme.Dialog'> <item name='android:background'>#00000000</item> <item name='android:windowBackground'>@android:color/transparent</item> <item name='android:windowNoTitle'>true</item> <item name='android:windowIsFloating'>true</item> </style> </resources>

自定義Dialog的實現類CustomDialog

package com.dyr.custom; import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView; import com.dyr.view.R; public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); } public CustomDialog(Context context, int theme) { super(context, theme); } public static class Builder { private Context context; private String title; private String message; private String positiveButtonText; private String negativeButtonText; private View contentView; private DialogInterface.OnClickListener positiveButtonClickListener; private DialogInterface.OnClickListener negativeButtonClickListener; public Builder(Context context) { this.context = context; } public Builder setMessage(String message) { this.message = message; return this; } /** * Set the Dialog message from resource * * @param title * @return */ public Builder setMessage(int message) { this.message = (String) context.getText(message); return this; } /** * Set the Dialog title from resource * * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } /** * Set the Dialog title from String * * @param title * @return */ public Builder setTitle(String title) { this.title = title; return this; } public Builder setContentView(View v) { this.contentView = v; return this; } /** * Set the positive button resource and it’s listener * * @param positiveButtonText * @return */ public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = (String) context .getText(negativeButtonText); this.negativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = negativeButtonText; this.negativeButtonClickListener = listener; return this; } public CustomDialog create() { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme final CustomDialog dialog = new CustomDialog(context,R.style.Dialog); View layout = inflater.inflate(R.layout.dialog_normal_layout, null); dialog.addContentView(layout, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // set the dialog title ((TextView) layout.findViewById(R.id.title)).setText(title); // set the confirm button if (positiveButtonText != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setText(positiveButtonText); if (positiveButtonClickListener != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.positiveButton).setVisibility( View.GONE); } // set the cancel button if (negativeButtonText != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setText(negativeButtonText); if (negativeButtonClickListener != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { negativeButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.negativeButton).setVisibility( View.GONE); } // set the content message if (message != null) { ((TextView) layout.findViewById(R.id.message)).setText(message); } else if (contentView != null) { // if no message set // add the contentView to the dialog body ((LinearLayout) layout.findViewById(R.id.content)) .removeAllViews(); ((LinearLayout) layout.findViewById(R.id.content)) .addView(contentView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); } dialog.setContentView(layout); return dialog; } }}

使用代碼

CustomDialog.Builder builder = new CustomDialog.Builder(this); builder.setMessage('這個就是自定義的提示框'); builder.setTitle('提示'); builder.setPositiveButton('確定', new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //設置你的操作事項 } }); builder.setNegativeButton('取消', new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();

至此,自定義彈出框已經完成,是不是感覺很簡單呢。

這里附上一個自定義彈出框的小項目代碼下載地址:點擊打開鏈接

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲人被黑人高潮完整版| 日韩午夜黄色| 亚洲美女黄色| 久久久国际精品| 成人网男人的天堂| 欧美一级国产精品| 久久成人久久鬼色| 美女网站久久| 亚洲成人777| 欧美性天天影院| 日韩你懂的在线播放| 国产一区二区三区高清播放| 欧美视频在线播放| 经典三级一区二区| 在线播放日韩导航| 狠狠色丁香久久婷婷综| 欧美亚洲精品一区| 蜜桃精品视频在线观看| 欧美综合欧美视频| 精品中文字幕一区二区| 欧美日韩不卡在线| 国产suv精品一区二区三区| 日韩欧美一级二级| 成人av资源网站| 精品国产乱码久久久久久免费| 国产久卡久卡久卡久卡视频精品| 欧美日韩成人在线| 高清国产午夜精品久久久久久| 欧美成人video| 91视频在线看| 中文字幕欧美区| 亚洲国产午夜| 亚洲高清在线精品| 在线看不卡av| 国产精品一区一区三区| 日韩亚洲欧美成人一区| 91在线高清观看| 中文无字幕一区二区三区 | 久久精品一区| 久久精品噜噜噜成人88aⅴ| 欧美日韩高清一区二区不卡 | 国产农村妇女精品一二区 | 欧美日韩一卡二卡三卡| 国产成人综合网| 久久亚洲精品国产精品紫薇| 国内揄拍国内精品久久| 亚洲欧洲日韩一区二区三区| 亚洲精品在线视频观看| 亚洲1区2区3区4区| 91精品久久久久久久99蜜桃| av色综合久久天堂av综合| 亚洲视频一区二区在线| 日韩一级欧美一级| 欧美日韩一区二区三区在线观看免| 亚洲桃色在线一区| 日本韩国一区二区三区| 岛国精品一区二区| 自拍偷拍欧美精品| 欧美写真视频网站| eeuss影院一区二区三区| 《视频一区视频二区| 色域天天综合网| 国产精一品亚洲二区在线视频| www国产精品av| 一二三区精品| 国产麻豆一精品一av一免费| 欧美国产一区二区在线观看 | 久久青草欧美一区二区三区| 99在线|亚洲一区二区| 激情五月婷婷综合网| 国产欧美日韩另类视频免费观看| 亚洲欧美日韩在线综合| 东方欧美亚洲色图在线| 中文字幕色av一区二区三区| 一本色道久久综合狠狠躁的推荐 | 成人av在线影院| 日韩毛片在线免费观看| 在线欧美日韩国产| 亚洲欧美一区在线| 天天综合网天天综合色| 欧美不卡激情三级在线观看| 99成人精品| 国产一区二区剧情av在线| 国产欧美日韩另类一区| 久久久7777| www.欧美日韩国产在线| 午夜在线成人av| 久久综合九色综合欧美98| 国产精品免费区二区三区观看| 国产精品资源在线| 伊人一区二区三区| 欧美成人三级在线| 久久激情一区| 欧美国产免费| 久久精品99久久久| 日韩理论片中文av| 91精品国产美女浴室洗澡无遮挡| 99国产精品久久久久老师 | 日韩精品免费视频人成| 久久精品亚洲国产奇米99| 国产专区综合网| 一区二区高清视频在线观看| 日韩美女视频在线| 美女精品国产| 一区在线观看| 盗摄精品av一区二区三区| 五月天亚洲婷婷| 国产精品国产三级国产三级人妇| 777奇米成人网| 亚洲一区二区在线看| 牛牛国产精品| 国产乱子轮精品视频| 亚洲成人动漫一区| 国产精品美女久久福利网站| 欧美一级二级三级乱码| 一本色道久久综合精品竹菊| 国产一区在线免费观看| www.一区二区| 国产精品白丝av| 日本在线不卡视频| 亚洲精品五月天| 久久久国产午夜精品| 555www色欧美视频| 一本到高清视频免费精品| 亚洲国产高清一区二区三区| 成人综合在线观看| 美女一区二区三区在线观看| 精品国产伦一区二区三区观看体验| 色香色香欲天天天影视综合网 | 91麻豆精品国产91久久久久 | 国产欧美视频一区二区| 日韩视频123| 欧美日韩高清一区| 色综合久久99| 国产精品一区二区三区观看| 国产精品a级| 91碰在线视频| 成人免费电影视频| 国产一区二区三区观看| 免费一级欧美片在线观看| 亚洲观看高清完整版在线观看| 亚洲少妇30p| 国产日韩欧美高清免费| 国产在线精品二区| 欧美激情四色| 97久久久精品综合88久久| 国产成人精品亚洲日本在线桃色 | 国产亚洲人成网站| 欧美不卡一区二区三区四区| 在线播放日韩导航| 欧美久久久一区| 欧美一区二区三区视频免费播放| 欧美色综合影院| 欧美伊人久久久久久久久影院 | 99国产精品自拍| 91免费视频网址| 不卡的av在线播放| www.色精品| 波多野结衣欧美| eeuss鲁片一区二区三区| 成人激情开心网| 成人国产精品免费观看动漫| 国产精品资源在线看| 国产成人亚洲精品狼色在线| 国产精品1区2区| 国产乱码精品一区二区三区忘忧草| 免费成人性网站| 玖玖九九国产精品| 另类的小说在线视频另类成人小视频在线 | 午夜激情一区| 91网站视频在线观看| 欧美国产另类| 黄色亚洲精品| 亚洲免费成人| 夜夜精品视频| 国产九区一区在线| 久久高清国产| 欧美伊人久久久久久久久影院| 欧美色精品天天在线观看视频| 欧美日韩二区三区| 日韩欧美电影在线| 久久精品亚洲麻豆av一区二区 | 色悠悠亚洲一区二区| 欧美三级韩国三级日本一级| 在线成人高清不卡| 欧美xxxxx裸体时装秀| 日日夜夜一区二区| 看国产成人h片视频| 国产精品18久久久久久久久| 不卡的av中国片| 欧美视频四区| 亚洲一区日韩在线| 欧洲精品一区二区三区在线观看| 91.xcao| 国产三级精品视频| 亚洲欧美偷拍卡通变态| 91婷婷韩国欧美一区二区| 激情国产一区| 久久人人超碰| 91精品国产欧美一区二区成人 |