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

首頁 > 系統(tǒng) > Android > 正文

Android用PopupWindow實現(xiàn)自定義Dailog

2019-12-12 03:57:21
字體:
供稿:網(wǎng)友

Android的PopupWindow是個很有用的widget,利用它可以實現(xiàn)懸浮窗體的效果,比如實現(xiàn)一個懸浮的菜單,最常見的應用就是在視頻播放界面里,做一個工具欄,用來控制播放進度。本文利用PopupWindow來實現(xiàn)一個通用的Dailog,類似Android系統(tǒng)的AlertDailog,從中學習和掌握有關PopupWindow和Dailog的使用和實現(xiàn)細節(jié)。

界面效果如圖所示,點擊 Click 按鈕后,彈出對話框提示。


(1).  CustomDailog的布局

首先定義 CustDailog的布局文件,由系統(tǒng)的AlertDailog可以知道,一個對話框包含了三個要素,一個是Title,即標題,一個是Message,即主體內(nèi)容,還有一個是Button,即確定和取消的按鈕,用來與用戶交互。因此,布局設計如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:orientation="vertical"  android:background="@drawable/shape_bg"  android:layout_margin="10dp">                                                                                                                                                           <TextView       android:id="@+id/CustomDlgTitle"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:textStyle="bold"    android:textSize="20sp"    android:layout_margin="10dp"    android:gravity="center"/>                                                                                                                                                             <View    android:layout_width="match_parent"    android:layout_height="1dp"    android:background="@android:color/darker_gray"/>                                                                                                                                                             <LinearLayout    android:id="@+id/CustomDlgContentView"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    android:layout_margin="5dp" />                                                                                                                                                           <TextView    android:id="@+id/CustomDlgContentText"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:textSize="15sp"    android:layout_margin="5dp"    android:paddingLeft="5sp"/>                                                                                                                                                         <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_margin="5dp" >                                                                                                                                                             <Button      android:id="@+id/CustomDlgButtonOK"      android:layout_width="0dp"      android:layout_weight="0.5"      android:layout_height="wrap_content"      android:visibility="gone"/>                                                                                                                                                                 <Button      android:id="@+id/CustomDlgButtonCancel"      android:layout_width="0dp"      android:layout_weight="0.5"      android:layout_height="wrap_content"           android:visibility="gone"/>                                                                                                                                                        </LinearLayout>                                                                                                                                                       </LinearLayout>

其中,shap_bg.xml 是Dailog的背景的定義文件,你可以修改此文件,來改變Dailog的背景:

<?xml version="1.0" encoding="UTF-8"?><shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">  <solid android:color="#e6ecee" />  <stroke android:width="1.0dip" android:color="@android:color/darker_gray" />  <corners android:radius="8.0dip" /></shape>

(2). CustomDailog的定義

CustomDailog的接口,可以類比AlertDailg的接口定義,主要包括如下一些方法:

1.  setTitle 設置標題
2.  setMessage 設置主體內(nèi)容
3.  setPositiveButton 設置 “確定” 按鈕
4.  setNegativeButton 設置 “取消” 按鈕
5.  show   顯示
6.  dimiss 消失

其定義如下:

package com.ticktick.popdailog;                                                                         import android.content.Context;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.TextView;                                                                           public class CustomDailog {                                                                          private View mParent;  private PopupWindow mPopupWindow;  private LinearLayout mRootLayout;   private LayoutParams mLayoutParams;                                                                           //PopupWindow必須有一個ParentView,所以必須添加這個參數(shù)  public CustomDailog(Context context, View parent) {                                                                              mParent = parent;                                                                              LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                                                                                 //加載布局文件    mRootLayout = (LinearLayout)mInflater.inflate(R.layout.custom_dailog, null);                                                                                   mLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  }                                                                           //設置Dailog的標題  public void setTitle(String title) {    TextView mTitle = (TextView)mRootLayout.findViewById(R.id.CustomDlgTitle);    mTitle.setText(title);  }                                                                          //設置Dailog的主體內(nèi)容  public void setMessage(String message) {    TextView mMessage = (TextView)mRootLayout.findViewById(R.id.CustomDlgContentText);    mMessage.setText(message);  }                                                                          //設置Dailog的“確定”按鈕  public void setPositiveButton(String text,OnClickListener listener ) {    final Button buttonOK = (Button)mRootLayout.findViewById(R.id.CustomDlgButtonOK);    buttonOK.setText(text);    buttonOK.setOnClickListener(listener);    buttonOK.setVisibility(View.VISIBLE);  }                                                                          //設置Dailog的“取消”按鈕  public void setNegativeButton(String text,OnClickListener listener ) {    final Button buttonCancel = (Button)mRootLayout.findViewById(R.id.CustomDlgButtonCancel);    buttonCancel.setText(text);    buttonCancel.setOnClickListener(listener);    buttonCancel.setVisibility(View.VISIBLE);  }                                                                          //替換Dailog的“主體”布局  public void setContentLayout(View layout) {                                                                              TextView mMessage = (TextView)mRootLayout.findViewById(R.id.CustomDlgContentText);    mMessage.setVisibility(View.GONE);                                                                              LinearLayout contentLayout = (LinearLayout)mRootLayout.findViewById(R.id.CustomDlgContentView);       contentLayout.addView(layout);         }                                                                          //設置Dailog的長寬  public void setLayoutParams(int width, int height) {    mLayoutParams.width = width;    mLayoutParams.height = height;  }                                                                          //顯示Dailog  public void show() {                                                                            if(mPopupWindow == null) {      mPopupWindow = new PopupWindow(mRootLayout, mLayoutParams.width,mLayoutParams.height);      mPopupWindow.setFocusable(true);    }                                                                              mPopupWindow.showAtLocation(mParent, Gravity.CENTER, Gravity.CENTER, Gravity.CENTER);  }                                                                          //取消Dailog的顯示  public void dismiss() {                                                                              if(mPopupWindow == null) {      return;    }                                                                              mPopupWindow.dismiss();  }}

(3). 在Activity中的使用方法

由于 PopupWindow 的顯示必須給一個ParentView,在Activity中使用的話,最簡單的方法就是將整個activity的“根View”傳遞給這個PopupWindow,這樣就可以在整個屏幕的正中央來顯示Dailog,獲取Acitivity的根View的方法如下:

findViewById(android.R.id.content)).getChildAt(0);

因此,上面定義的 CunstomDailog的使用方法如下所示:

final CustomDailog dailog = new CustomDailog(this,getRootLayout());dailog.setTitle("Warning");dailog.setMessage("This is ticktick's blog!");dailog.setPositiveButton("OK", new OnClickListener() {      @Override  public void onClick(View v) {    dailog.dismiss();       }});dailog.setNegativeButton("Cancel", new OnClickListener() {      @Override  public void onClick(View v) {  dailog.dismiss();       }});dailog.show();

到此為止,整個Dailog的實現(xiàn)就介紹到這里了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 德安县| 甘谷县| 梓潼县| 阳西县| 和田县| 蒙阴县| 邮箱| 武鸣县| 临西县| 榆中县| 磐安县| 普兰店市| 陆河县| 滨州市| 沛县| 科技| 马尔康县| 阳原县| 牟定县| 常州市| 巨鹿县| 舒城县| 孟连| 桃江县| 滁州市| 荔浦县| 福清市| 逊克县| 赤壁市| 白银市| 山阴县| 青州市| 遂宁市| 分宜县| 阿勒泰市| 依安县| 班玛县| 沁源县| 依兰县| 隆尧县| 梨树县|