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

首頁 > 系統 > Android > 正文

自定義Dialog彈框和其背景陰影顯示方法

2019-10-21 21:44:58
字體:
來源:轉載
供稿:網友

昨天研究了一下自定義Dialog的彈框,其實要點都是把自定義好的view用setContentView(view)的方法設置進dialog里,首先我們先看一個簡單的自定義Dialog。

一、寫布局文件:custom_dialog_layout.xml(這個布局就是一個簡單的提示內容,下面有一個確定的按鈕,請參看評論中的效果圖)

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/content_layout" android:layout_gravity="center" android:gravity="center">  <LinearLayout  android:background="@drawable/dialog_content_white_with_radius"  android:layout_marginLeft="40dp"  android:layout_marginRight="40dp"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="vertical"  android:gravity="center">  <TextView   android:id="@+id/dialog_content_text"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:text="info"   android:textSize="@dimen/size40"   android:textColor="@color/word_color_444444"   android:padding="10dp"   android:gravity="center"/>  <View   android:layout_width="match_parent"   android:layout_height="0.5dp"   android:background="@color/divide_line"/>  <TextView   android:paddingTop="10dp"   android:paddingBottom="10dp"   android:id="@+id/tv_sure"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:gravity="center"   android:textColor="@color/main_color"   android:text = "確定"   android:textSize="@dimen/two_level_word"   /> </LinearLayout> </LinearLayout>

寫好布局文件后,由于布局直角不好看,我們可以設置邊框為圓角的shape,寫入,代碼如下:dialog_content_white_with_radius

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">  <solid android:color="@color/wirte_ffffff" />  <corners  android:bottomLeftRadius="8dp"  android:bottomRightRadius="8dp"  android:topLeftRadius="8dp"  android:topRightRadius="8dp" /></shape>

二、寫自定義Dialog類繼承自Dialog:

 /** [Description] * 只有確認button * [How to use] * * [Tips] * * Created by lan.zheng on 2017/7/25 18:26. */ public class SureClickDialog extends Dialog { private Listener mListener;  public SureClickDialog(Context context) {  super(context); }  public SureClickDialog(Context context, String content, Listener listener){  super(context, R.style.custom_dialog_style);  mListener = listener;  View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_have_been_sign_section_show, null);  TextView contentTextView = (TextView) contentView.findViewById(R.id.dialog_content_text);  contentTextView.setText(content);  TextView sureButton = (TextView) contentView.findViewById(R.id.tv_sure);   //消失監聽  this.setOnDismissListener(new OnDismissListener() {   @Override   public void onDismiss(DialogInterface dialog) {    mListener.onDialogDismissListener();   }  });  //確認  sureButton.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    dismiss();    mListener.onSureListerner();   }  });  setContentView(contentView); }  public interface Listener {  void onDialogDismissListener();  void onSureListerner(); }}

這里我們只監聽彈框消失和點擊確定的按鈕,好了基本工作到這里完成了,最后就是設置樣式style,一般彈框背景都是半透明的遮罩:

 <style name="custom_dialog_style" parent="android:Theme.Dialog">  <item name="android:windowFrame">@null</item>  <item name="android:windowIsFloating">true</item>  <item name="android:windowIsTranslucent">false</item>  <item name="android:windowNoTitle">true</item><!--除去title-->  <item name="android:backgroundDimEnabled">true</item><!--半透明-->  <item name="android:windowBackground">@color/transparent</item><!--除去背景色-->  <item name="android:radius">10dp</item> </style>

這樣就完成了一個背景半透明的彈框了。

設置<itemname="android:backgroundDimEnabled">true</item><!--半透明-->能實現半透明,但是如果有特殊的背景要求那就不能滿足了,此時通過查詢發現,可以重寫下面這個函數進行把整個你自定義的布局全屏顯示。

@Override public void show() {  super.show();  /**   * 設置寬度全屏,要設置在show的后面   */  WindowManager.LayoutParams layoutParams = getWindow().getAttributes();  layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT;  layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT;  getWindow().getDecorView().setPadding(0, 0, 0, 0);  getWindow().setAttributes(layoutParams); }

發現是生效的,我布局中的背景是成功的應用上了,但是發現點擊外圍卻不能讓彈框消失,這是因為你的彈框已經是全屏了,所以在屏幕上就沒有所謂的彈框外圍了,這時候我們可以自己去監聽點擊事件,我們來重寫一下自定義Dialog類:

/** * [Description] * 只有確認button * [How to use] * new SureClickDialog() * [Tips] * isClickOutsideCanDismiss必須給值,true表示可點擊外圍消失,false表示不能 * Created by lan.zheng on 2017/7/25 18:26. */ public class SureClickDialog extends Dialog { private Listener mListener;  public SureClickDialog(Context context) {  super(context); }  public SureClickDialog(Context context, String content, boolean isClickOutsideCanDismiss,Listener listener){  super(context, R.style.custom_dialog_style);  mListener = listener;  View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_have_been_sign_section_show, null);  LinearLayout linearLayout = (LinearLayout)contentView.findViewById(R.id.content_layout) ; //自定義布局的最外層  linearLayout.setBackgroundColor(context.getResources().getColor(R.color.half_transparent));  linearLayout.setOnClickListener(new View.OnClickListener() { //為其設置自定義點擊監聽   @Override   public void onClick(View v) {    if(isClickOutsideCanDismiss){     dismiss();    }   }  });  TextView contentTextView = (TextView) contentView.findViewById(R.id.dialog_content_text);  contentTextView.setText(content);  TextView sureButton = (TextView) contentView.findViewById(R.id.tv_sure);   //消失監聽  this.setOnDismissListener(new OnDismissListener() {   @Override   public void onDismiss(DialogInterface dialog) {    mListener.onDialogDismissListener();   }  });  //確認  sureButton.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    dismiss();    mListener.onSureListerner();   }  });  setContentView(contentView); }   @Override public void show() {  super.show();   WindowManager.LayoutParams layoutParams = getWindow().getAttributes();  layoutParams.width= ViewGroup.LayoutParams.MATCH_PARENT;  layoutParams.height= ViewGroup.LayoutParams.MATCH_PARENT;  getWindow().getDecorView().setPadding(0, 0, 0, 0);  getWindow().setAttributes(layoutParams); }   public interface Listener {  void onDialogDismissListener();  void onSureListerner(); }}

OK,關于彈框的就寫到這里啦,自定義的功能十分豐富和具有可塑性,有興趣的可以研究一下。

以上這篇自定義Dialog彈框和其背景陰影顯示方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额敏县| 广元市| 中山市| 大理市| 遂川县| 高密市| 惠水县| 石屏县| 齐齐哈尔市| 股票| 象州县| 垣曲县| 海林市| 南平市| 当涂县| 淅川县| 海丰县| 台安县| 房产| 梨树县| 佛坪县| 谷城县| 北川| 濮阳市| 靖远县| 芦溪县| 大余县| 渑池县| 慈利县| 得荣县| 乌兰浩特市| 恩平市| 柳江县| 稻城县| 鹰潭市| 平塘县| 汉中市| 五常市| 泸定县| 凤庆县| 昌吉市|