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;
}
}
}
到这里我们来看看效果图:
再看看控制台:
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”就可以了。
最后我们看看终极效果图
最后附上源码:
原文地址:http://blog.youkuaiyun.com/hanjianc/article/details/49100729