Android 는 PopupWindow 로 사용자 정의 Dailog 를 실현 합 니 다.
11518 단어 AndroidPopupWindowDailog
화면 효 과 는 그림 과 같 습 니 다.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();
여기까지 데 일 로그 의 실현 전 체 를 소개 했다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.