android Dialog 自定义 封装

来源:互联网 发布:淘宝怎么升级企业店铺 编辑:程序博客网 时间:2024/06/11 08:09

本文代码是将一个title和两个button的自定义dialog封装了一下,用的时候只需设置contentview即可,方便于较多使用相同dialog样式但内容不同的情况。

 

CommonDialog.java

package com.wzf.common;import android.app.Activity;import android.app.Dialog;import android.view.Display;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager.LayoutParams;import android.widget.Button;import android.widget.FrameLayout;import android.widget.TextView;import com.wzf.R;/** * useage * <pre> * DialogClickListener mDialogClickListener = new DialogClickListener() { *     @Override *     public void onOkClickListener(Dialog dialog) { *         Toast.makeText(ManageRoomListActivity.this, "ok", Toast.LENGTH_SHORT).show(); *         dialog.dismiss(); *     } *     @Override *     public void onCancelClickListener(Dialog dialog) { *         Toast.makeText(ManageRoomListActivity.this, "cancel", Toast.LENGTH_SHORT).show(); *         dialog.dismiss(); *     } * }; *  * private void showDialog() { *     CommonDialog commonDialog  = new CommonDialog(this); *     final Dialog dialog = commonDialog.setTitle(R.string.dialog_title_add_room) *             .setContentView(R.layout.base_dialog_content_add_room) *             .setOkClickListener(mDialogClickListener) *             .setCancelListener(mDialogClickListener) *             .create(); *     FrameLayout parent = commonDialog.getContentParent(); *  *     ImageView image = (ImageView) parent.findViewById(R.id.image); *     EditText edit = (EditText) parent.findViewById(R.id.edit); * } * </pre> * */public class CommonDialog {Activity mActivity;TextView mTitle;Button mOk;Button mCancel;FrameLayout mFrameLayout;Dialog mDialog;DialogClickListener mOkClickListener;DialogClickListener mCancelClickListener;int mTitleResId = INVALID_RES_ID;int mContentResId = INVALID_RES_ID;static final int INVALID_RES_ID = 0;public CommonDialog(Activity a) {mActivity = a;mDialog = new Dialog(mActivity, R.style.base_dialog);mDialog.show();    Window window = mDialog.getWindow();    Display d = mActivity.getWindowManager().getDefaultDisplay();    LayoutParams p = window.getAttributes();    p.width = (int) (d.getWidth() * 0.95);    window.setAttributes(p);    window.setContentView(R.layout.base_dialog_layout);    mTitle = (TextView) window.findViewById(R.id.title);    mFrameLayout = (FrameLayout) window.findViewById(R.id.frame_layout);    mCancel = (Button) window.findViewById(R.id.btn_cancel);    mOk = (Button) window.findViewById(R.id.btn_ok);}public Dialog create() {if (mTitleResId != INVALID_RES_ID) mTitle.setText(mTitleResId);if (mContentResId != INVALID_RES_ID) LayoutInflater.from(mActivity).inflate(mContentResId, mFrameLayout);if (mOkClickListener != null) mOk.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mOkClickListener.onOkClickListener(mDialog);}});if (mCancelClickListener != null) mCancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mCancelClickListener.onCancelClickListener(mDialog);}});    return mDialog;}public FrameLayout getContentParent() {return mFrameLayout;}public CommonDialog setTitle(int resId) {mTitleResId = resId;return this;}public CommonDialog setOkClickListener(DialogClickListener l) {mOkClickListener = l;return this;}public CommonDialog setCancelListener(DialogClickListener l) {mCancelClickListener = l;return this;}public CommonDialog setContentView(int resId) {    mContentResId = resId;return this;}public interface DialogClickListener {void onOkClickListener(Dialog dialog);void onCancelClickListener(Dialog dialog);}}

 

styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">    <style name="base_dialog" parent="@android:style/Theme.Dialog">          <item name="android:windowFrame">@null</item><!-- 边框 -->        <item name="android:windowIsFloating">true</item><!-- 是否浮现在activity之上 -->          <item name="android:windowIsTranslucent">false</item><!-- 半透明 -->          <item name="android:windowNoTitle">true</item><!-- 无标题 -->          <item name="android:windowBackground">@null</item><!-- 自己想要的背景 -->          <item name="android:backgroundDimEnabled">false</item><!-- 模糊 -->      </style></resources>


base_dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:background="@color/dialog_bg" >    <TextView        android:id="@+id/title"        android:layout_width="match_parent"        android:layout_height="@dimen/dialog_title_height"        android:paddingLeft="20dp"        android:gravity="center_vertical"        android:textSize="@dimen/dialog_title_size"        android:textColor="@color/white"        android:background="@color/dialog_bg_title"/>    <FrameLayout        android:id="@+id/frame_layout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingTop="10dp"        android:paddingBottom="10dp"        android:paddingLeft="20dp"        android:paddingRight="20dp"/>"    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dp"        android:gravity="center_horizontal" >        <Button            android:id="@+id/btn_cancel"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:layout_marginLeft="@dimen/dialog_btn_margin"            android:background="@drawable/button_selector"            android:text="@string/cancel"            android:textColor="@color/black"            android:textSize="@dimen/dialog_middle_text_size" />        <Button            android:id="@+id/btn_ok"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:layout_marginLeft="@dimen/dialog_btn_margin"            android:layout_marginRight="@dimen/dialog_btn_margin"            android:background="@drawable/button_selector"            android:text="@string/ok"            android:textColor="@color/dialog_bg_btn_ok"            android:textSize="@dimen/dialog_middle_text_size" />    </LinearLayout></LinearLayout>


布局中使用的一些res id 这里就不列出了,调一下就行了。

使用方法在java文件注释里。

0 0
原创粉丝点击