android自定义Dialog

来源:互联网 发布:淘宝网跳舞毯 编辑:程序博客网 时间:2024/05/05 16:16

1.新建一个项目

取名为CustomDialog,项目结构如图所示:

项目结构

2.定义一个接口DialogListener

package com.example.customdialog;import android.view.View;public interface DialogListener {    public void OnClick(View v);}

3.写一个类CustomDialog继承Dialog

package com.example.customdialog;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;public class CustomDialog extends Dialog  implements android.view.View.OnClickListener{     TextView tv_message;     Button bt_yes,bt_no;     ImageView iv_warn;    DialogListener dialogListner;     String content;    Integer resId;    //resId是iv_warn.setBackgroundResource(resId);的图片资源    public CustomDialog(Context context, int theme,Integer resId,String content,DialogListener dialogListner){         super(context, theme);         this.dialogListner=dialogListner;         this.resId=resId;        this.content=content;     }     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         this.setContentView(R.layout.custom_dialog);         //点击外部不会消失          this.setCanceledOnTouchOutside(false);         InitViews();     }     private void InitViews(){         iv_warn=(ImageView) findViewById(R.id.iv_warn);         tv_message=(TextView) findViewById(R.id.tv_message);         iv_warn.setBackgroundResource(resId);        tv_message.setText(this.content);        bt_yes=(Button) findViewById(R.id.bt_yes);         bt_no=(Button) findViewById(R.id.bt_no);         bt_yes.setOnClickListener(this);         bt_no.setOnClickListener(this);     }     @Override     public void onClick(View v) {         // TODO Auto-generated method stub          dialogListner.OnClick(v);         dismiss();    }     @Override     public void dismiss() {         super.dismiss();     } } 

4.再写一个custom_dialog的配置文件

弹出的自定义Dialog样式在这里进行定义!

<?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:layout_gravity="center"    android:background="@drawable/dialog_custom_bg"    android:gravity="center_horizontal"    android:orientation="vertical" >    <ImageView        android:id="@+id/iv_warn"        android:layout_width="80dip"        android:layout_height="80dip"        android:layout_marginTop="15dip" />    <TextView        android:id="@+id/tv_message"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dip"        android:gravity="center"        android:textSize="18sp" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginBottom="8dp"        android:layout_marginTop="20dp"        android:layout_margin="10dp"         >        <Button            android:id="@+id/bt_yes"            android:layout_width="100dp"            android:layout_height="wrap_content"            android:gravity="center"            android:text="@string/btn_yes" />        <Button            android:id="@+id/bt_no"            android:layout_width="100dp"            android:layout_height="wrap_content"            android:layout_marginLeft="10dp"            android:gravity="center"            android:text="@string/btn_no" />    </LinearLayout></LinearLayout>

5.dialog的背景样式

在drawable里新建文件dialog_custom_bg.xml文件,第四步的 custom_dialog.xml里面的LinearLayout的background用到。

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >        <solid android:color="#fff4f4f4" />    <corners        android:bottomLeftRadius="8dp"        android:bottomRightRadius="8dp"        android:topLeftRadius="8dp"        android:topRightRadius="8dp" /></shape>

6.在style.xml文件里添加自定义的Dialog样式

    <style name="Custom_Dialog" parent="@android:style/Theme.Dialog">        <item name="android:windowFrame">@null</item>        <item name="android:windowIsFloating">true</item>        <item name="android:windowContentOverlay">@null</item>        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>        <item name="android:windowBackground">@android:color/transparent</item>        <item name="android:windowNoTitle">false</item>    </style>

6.定义MainActivity

到这一步基本上大功告成了,就剩下在MainActivity里面调用了,在activity_main里面定义一个Button按钮,这里就不说,后面会附上源码:

package com.example.customdialog;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {    private static String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        Button b = (Button) findViewById(R.id.btn_custom_dialog);        b.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.btn_custom_dialog:            CustomDialog dialog = new CustomDialog(MainActivity.this,                    R.style.Custom_Dialog, R.drawable.ic_launcher, "我帅不!",                    new DialogListener() {                        @Override                        public void OnClick(View v) {                            switch (v.getId()) {                            case R.id.bt_yes:                                Log.v(TAG, "是的,你很帅!");                                break;                            case R.id.bt_no:                                Log.v(TAG, "不是的,你非常帅!");                            default:                                break;                            }                        }                    });            dialog.show();            break;        default:            break;        }    }}

到这里我们来看看效果图:
CustomDialog_MianActivity
CustomDialog_Handsome
再看看控制台:
Console

7.自定义按钮

看图片是不是发觉按钮不好看,既然是自定义,那我们就自定义按钮,这里用到的是Android选择器的知识,首先定义一个选择器btn_selector.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="@drawable/btn_pressed"></item>    <item android:state_pressed="false" android:drawable="@drawable/btn_nomal"></item></selector>

选择器里定义了按下的样式和常态下的样式,分别定义两个资源文件,这里只写一个,因为两个相差不大:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >    <solid android:color="#23BA00" /> <!-- 定义填充的颜色值 -->      <!-- 圆角 -->      <corners android:radius="5dp" />      <!-- 间隔  -->      <padding          android:bottom="5dp"          android:left="10dp"          android:right="10dp"          android:top="5dp" />  </shape>

引用的时候只要在button里加上android:background=”@drawable/btn_selector”就可以了。

最后我们看看终极效果图

CustomDialog

最后附上源码:

CustomDialog源码

原文地址:http://blog.csdn.net/hanjianc/article/details/49100729

0 0
原创粉丝点击