Android 는 PopupWindow 로 사용자 정의 Dailog 를 실현 합 니 다.

Android 의 PopupWindow 는 매우 유용 한 widget 입 니 다.이 를 이용 하여 현탁 창의 효 과 를 실현 할 수 있 습 니 다.예 를 들 어 떠 있 는 메뉴 를 실현 할 수 있 습 니 다.가장 흔히 볼 수 있 는 응용 프로그램 은 영상 재생 인터페이스 에서 도구 모음 을 만들어 재생 진 도 를 조절 하 는 것 입 니 다.본 고 는 PopupWindow 를 이용 하여 안 드 로 이 드 시스템 과 유사 한 AlertDailog 를 실현 하고 이 를 통 해 PopupWindow 와 Dailog 의 사용 과 실현 에 관 한 세부 사항 을 배우 고 파악 하고 자 한다.
화면 효 과 는 그림 과 같 습 니 다.Click 단 추 를 누 르 면 대화 상자 알림 이 팝 업 됩 니 다.

(1).  사용자 정의 Dailog 레이아웃
먼저 Cust Dailog 의 레이아웃 파일 을 정의 합 니 다.시스템 의 AlertDailog 에서 알 수 있 듯 이 하나의 대화 상자 에는 세 가지 요소 가 포함 되 어 있 습 니 다.하 나 는 Title,즉 제목,하 나 는 Message,즉 주체 내용 이 고 다른 하 나 는 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>

그 중,shapbg.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 의 정의
customeDailog 의 인 터 페 이 스 는 AlertDailg 의 인터페이스 와 유사 하 게 정의 할 수 있 는데 주로 다음 과 같은 방법 을 포함한다.
1.  setTitle 설정 제목
2.  setMessage 설정 주체 내용
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,          
  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     
  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();

여기까지 데 일 로그 의 실현 전 체 를 소개 했다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기