真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

目前成都創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、澄海網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

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

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

(1).  CustomDailog的布局

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

<?xml version="1.0" encoding="utf-8"?>

                                                                                                                                                         
  
                                                                                                                                                           
  
                                                                                                                                                           
  
                                                                                                                                                         
  
                                                                                                                                                       
  
                                                                                                                                                         
    

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

<?xml version="1.0" encoding="UTF-8"?>

  
  
  


(2). CustomDailog的定義

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

1.  setTitle 設(shè)置標(biāo)題
2.  setMessage 設(shè)置主體內(nèi)容
3.  setPositiveButton 設(shè)置 “確定” 按鈕
4.  setNegativeButton 設(shè)置 “取消” 按鈕
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必須有一個(gè)ParentView,所以必須添加這個(gè)參數(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);
  } 
                                                                        
  //設(shè)置Dailog的標(biāo)題
  public void setTitle(String title) {
    TextView mTitle = (TextView)mRootLayout.findViewById(R.id.CustomDlgTitle);
    mTitle.setText(title);
  }
                                                                        
  //設(shè)置Dailog的主體內(nèi)容
  public void setMessage(String message) {
    TextView mMessage = (TextView)mRootLayout.findViewById(R.id.CustomDlgContentText);
    mMessage.setText(message);
  }
                                                                        
  //設(shè)置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);
  }
                                                                        
  //設(shè)置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);       
  }
                                                                        
  //設(shè)置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 的顯示必須給一個(gè)ParentView,在Activity中使用的話,最簡單的方法就是將整個(gè)activity的“根View”傳遞給這個(gè)PopupWindow,這樣就可以在整個(gè)屏幕的正中央來顯示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();

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


網(wǎng)站名稱:Android用PopupWindow實(shí)現(xiàn)自定義Dailog
分享URL:http://weahome.cn/article/pihjss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部