Android 自定义对话框

来源:互联网 发布:万花尺软件 编辑:程序博客网 时间:2024/05/16 15:33

1.DensityUtil 自定义工具类

public class DensityUtil {  
  
    /** 
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */  
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  
    }  
  
    /** 
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  
}

2.对话框title的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:background="@color/title_bg_color" >


    <Button
        android:id="@+id/left_btn"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="15dp"
        android:background="@drawable/back_arrow_selector"
        android:textColor="@color/white"
        android:textSize="18sp" />


    <TextView
        android:id="@+id/title_text"
        style="@style/title_bar_font"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical" />


    <Button
        android:id="@+id/right_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="15dp"
        android:background="@color/color_hei_8"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="@color/white"
        android:textSize="14sp" />


</RelativeLayout>

3.对话框title的实现

package com.example.image_up;


import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;

public class DialogTitleView extends FrameLayout implements
View.OnClickListener {


private Button mLeftBtn;
private Button mRightBtn;
private TextView mTitle;
private Context context;


private OnLeftButtonClickListener mOnLeftButtonClickListener;
private OnRightButtonClickListener mOnRightButtonClickListener;


public interface OnLeftButtonClickListener {
public void onClick(View button);
}


public interface OnRightButtonClickListener {
public void onClick(View button);
}


public void setLeftButton(String text, OnLeftButtonClickListener listener) {
mLeftBtn.setText(text);
mLeftBtn.setVisibility(View.VISIBLE);
mOnLeftButtonClickListener = listener;
}


public void setLeftButton(int stringID, OnLeftButtonClickListener listener) {
mLeftBtn.setText(stringID);
mLeftBtn.setVisibility(View.VISIBLE);
mOnLeftButtonClickListener = listener;
}

public void removeLeftButton() {
mLeftBtn.setText("");
mLeftBtn.setVisibility(View.INVISIBLE);
mOnLeftButtonClickListener = null;
}
public void hiddenLeftButton() {
mLeftBtn.setVisibility(View.INVISIBLE);
}

public void showLeftButton() {
mLeftBtn.setVisibility(View.VISIBLE);
}

public void setRightButton(String text, OnRightButtonClickListener listener) {
mRightBtn.setText(text);
mRightBtn.setBackgroundResource(R.drawable.titleview_button_selector);
mRightBtn.setHeight(DensityUtil.dip2px(context, 40));
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}

public void setRightButton(int stringID, OnRightButtonClickListener listener) {
mRightBtn.setText(stringID);
mRightBtn.setBackgroundResource(R.drawable.titleview_button_selector);
mRightBtn.setHeight(DensityUtil.dip2px(context, 40));
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}

public void setRightButton(String text, int resid,
OnRightButtonClickListener listener) {
mRightBtn.setBackgroundResource(resid);
mRightBtn.setText(text);
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}

public void removeRightButton() {
mRightBtn.setText("");
mRightBtn.setVisibility(View.INVISIBLE);
mOnRightButtonClickListener = null;
}

public void hiddenRightButton() {
mRightBtn.setVisibility(View.INVISIBLE);
}

public void showRightButton() {
mRightBtn.setVisibility(View.VISIBLE);
}

public DialogTitleView(Context context) {
this(context, null);
this.context = context;
}

public DialogTitleView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
this.context = context;
}

public DialogTitleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;

LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.dialog_title_view, this, true);

mLeftBtn = (Button) findViewById(R.id.left_btn);
mLeftBtn.setVisibility(View.INVISIBLE);
mLeftBtn.setOnClickListener(this);
mRightBtn = (Button) findViewById(R.id.right_btn);
mRightBtn.setVisibility(View.INVISIBLE);
mRightBtn.setOnClickListener(this);

mTitle = (TextView) findViewById(R.id.title_text);
mTitle.setVisibility(View.INVISIBLE);
}

public void setTitle(String text) {
mTitle.setVisibility(View.VISIBLE);
mTitle.setText(text);
}

public void setTitle(int stringID) {
mTitle.setVisibility(View.VISIBLE);
mTitle.setText(stringID);
}
public void setRightText(String text) {
mRightBtn.setText(text);
}
public void setRightIco(int res) {
// R.drawable.ico_down
Drawable drawable = context.getResources().getDrawable(res);
// / 这一步必须要做,否则不会显示.
drawable.setBounds(5, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
mRightBtn.setCompoundDrawables(null, null, drawable, null);
}
public void setLeftText(String text) {
mLeftBtn.setBackgroundResource(R.color.color_hei_8);
mLeftBtn.setVisibility(View.VISIBLE);
mLeftBtn.setText(text);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.left_btn:
if (mOnLeftButtonClickListener != null)
mOnLeftButtonClickListener.onClick(v);
break;
case R.id.right_btn:
if (mOnRightButtonClickListener != null)
mOnRightButtonClickListener.onClick(v);
break;
}
}
}

4.对话框的设计

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/color_bai"
    android:orientation="vertical" >
   <com.example.image_up.DialogTitleView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical"/>
    <TextView 
       android:id="@+id/text"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="14sp"
       android:textColor="@color/black"
       android:text="测试"
       android:layout_margin="20dp"
       />   
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"
        android:orientation="horizontal" >
        <Button
android:id="@+id/cancel_bt"            
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_marginLeft="10dp"
            android:layout_weight="1"
            android:background="@drawable/cancel_state"
            android:text="取消"
            android:textColor="#fff"
            android:textSize="18sp" />

        <Button
            android:id="@+id/ok_bt"          
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:background="@drawable/selector_state"
            android:text="确定"
            android:textColor="#fff"
            android:textSize="18sp" />
    </LinearLayout>
</LinearLayout>

5.对话框的设计

package com.example.image_up;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

public class DialogUtil {
/**
* 确认对话框

* @param context
* @param dialogInterface
* @return
*/
public static Dialog getTipsDialog(Activity context, String title,
String content, final OnClickButtonListener buttonListener) {

final Dialog dialog = new Dialog(context, R.style.Dialog);
dialog.setContentView(R.layout.dialog_tip_view);
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();

int screenW = getScreenWidth(context);
lp.width = (int) (0.9 * screenW);
DialogTitleView mTitle = (DialogTitleView) dialog
.findViewById(R.id.title);
mTitle.setTitle(title);
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText(content);


Button cancelBt = (Button) dialog.findViewById(R.id.cancel_bt);
Button okBt = (Button) dialog.findViewById(R.id.ok_bt);
cancelBt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
buttonListener.cancel();
}
});
okBt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
buttonListener.ok(null);
}
});
return dialog;
}
public interface OnClickButtonListener {
public void cancel();
public void ok(Bundle bundle);
}
public static int getScreenWidth(Activity context) {
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
}

6.补充的drawable下面的selecter

(1)back_arrow_selector.xml     //返回按钮

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/back_arrow_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/back_arrow_normal"></item>
</selector>

(2)cancel_state.xml  //取消按钮颜色的选择

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/cancel_press_color" />
<item android:state_focused="true" android:drawable="@color/cancel_press_color" />
<item android:drawable="@color/cancel_color" />
</selector>

(3)selector_state.xml  // 确定按钮的颜色选择

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/button_press" />
<item android:state_focused="true" android:drawable="@color/button_press" />
<item android:state_enabled="false" android:drawable="@color/button_disable" />
<item android:drawable="@color/button_no" />
</selector>

(4)titleview_button_selector.xml    //setRightButton右面图片的颜色

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/title_bg_press" android:state_pressed="true"></item>
    <item android:drawable="@color/title_bg_color"></item>
</selector>


7.style

<style name="Dialog" parent="@android:style/Theme.Dialog">    <item name="android:windowIsFloating">true</item>    <!-- 设置未浮动窗口 -->    <item name="android:windowFrame">@null</item>    <!-- 设置无边框 -->    <item name="android:windowNoTitle">true</item>    <!-- 设置无标题 -->    <item name="android:windowBackground">@color/transparent_all</item>    <!-- 设置完全透明 -->    <item name="android:backgroundDimEnabled">true</item>    <!-- 设置屏幕变暗 --></style>
8.使用   例:

DialogUtil.getTipsDialog(RegistActivity.this,        "该手机号已注册" ,"直接登录","修改号码", new DialogUtil.OnClickButtonListener() {            @Override            public void ok(Bundle bundle) {                Intent intent = new Intent(RegistActivity.this, LoginActivity_.class);                startActivity(intent);                finish();            }            @Override            public void cancel() {            }        }).show();

0 0
原创粉丝点击