Android 仿QQ消息提示,相册选择对话框
好久没写博客了,也是因为最近实在是太忙了,从我入职到现在,一直都是在加班。。。苦逼的生活。
因公司要求和IOS统一对话框(万恶的pm,什么都要和ios一样),所以就有了本文的对话框,二话不说,先来张效果图(没效果图的博客看着真蛋疼)。
先看看消息提示对话框布局文件:
dialog_message.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical"
android:paddingLeft="25dp"
android:paddingRight="25dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/rounded_trans_white_top"
android:orientation="vertical"
android:paddingBottom="25dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="25dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="17dp"
android:singleLine="true"
android:text="@string/message"
android:textColor="@android:color/black"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text=""
android:textColor="@android:color/black"
android:textSize="17sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/dialog_line" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="45dp" >
<View
android:id="@+id/v_center_line"
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="@color/dialog_line" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/v_center_line"
android:background="@drawable/dialog_bottom_left_selector"
android:text="@string/cancel"
android:textColor="@color/common_text"
android:textSize="17sp" />
<Button
android:id="@+id/btn_ok"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/v_center_line"
android:background="@drawable/dialog_bottom_right_selector"
android:text="@string/ok"
android:textColor="@color/common_text"
android:textSize="17sp" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
消息提示对话框java代码:
MessageDialog.java
public class MessageDialog extends Dialog implements View.OnClickListener {
private final TextView tv_message;
private final Button btn_cancel;
private final Button btn_ok;
private MessageCallBack callBack;
public MessageDialog(Context context) {
super(context, R.style.DialogCenterTheme);
setContentView(R.layout.dialog_message);
tv_message = (TextView) findViewById(R.id.tv_message);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
btn_ok = (Button) findViewById(R.id.btn_ok);
btn_cancel.setOnClickListener(this);
btn_ok.setOnClickListener(this);
}
public void show(MessageCallBack callBack) {
this.callBack = callBack;
super.show();
}
@Override
public void show() {
}
//确认、取消回调
public interface MessageCallBack {
void onOkClick();
void onCancelClick();
}
//消费了此次事件
@Override
public boolean onTouchEvent(MotionEvent event) {
cancel();
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_cancel:
callBack.onCancelClick();
cancel();
break;
case R.id.btn_ok:
callBack.onOkClick();
cancel();
break;
}
}
}
相册选择对话框布局文件:
dialog_picture_picker.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/btn_photograph"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/dialog_top_selector"
android:text="@string/photograph"
android:textColor="@color/common_text"
android:textSize="17sp" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/dialog_line" />
<Button
android:id="@+id/btn_from_album"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/dialog_bottom_selector"
android:text="@string/select_from_album"
android:textColor="@color/common_text"
android:textSize="17sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:orientation="vertical" >
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/dialog_cancel_selector"
android:text="@string/cancel"
android:textColor="@color/common_blue"
android:textSize="17sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
相册选择对话框java代码:
PicturePickerDialog.java
public class PicturePickerDialog extends Dialog implements View.OnClickListener {
private final Button btn_photograph;
private final Button btn_from_album;
private final Button btn_cancel;
private PicturePickerCallBack callBack;
public PicturePickerDialog(Context context) {
super(context, R.style.DialogBottomTheme);
setContentView(R.layout.dialog_picture_picker);
btn_photograph = (Button) findViewById(R.id.btn_photograph);
btn_from_album = (Button) findViewById(R.id.btn_from_album);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
btn_photograph.setOnClickListener(this);
btn_from_album.setOnClickListener(this);
btn_cancel.setOnClickListener(this);
}
public void show(PicturePickerCallBack callBack){
this.callBack = callBack;
super.show();
}
@Override
public void show() {
}
@Override
public boolean onTouchEvent(MotionEvent event) {
cancel();
return true;
}
public interface PicturePickerCallBack {
void onPhotoClick();
void onAlbumClick();
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_photograph:
callBack.onPhotoClick();
cancel();
break;
case R.id.btn_from_album:
callBack.onAlbumClick();
cancel();
break;
case R.id.btn_cancel:
cancel();
break;
}
}
}
MainActivity布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:background="#22cccccc"
android:paddingRight="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mumu.dialog.MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showDialog"
android:text="消息对话框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showPicturePicker"
android:text="相册选择对话框" />
</LinearLayout>
调用:
public class MainActivity extends AppCompatActivity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
}
public void showDialog(View view){
MessageDialog messageDialog = new MessageDialog(this);
messageDialog.show(new MessageDialog.MessageCallBack() {
@Override
public void onOkClick() {
Toast.makeText(mContext,"确 定",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelClick() {
Toast.makeText(mContext,"取 消",Toast.LENGTH_SHORT).show();
}
});
}
public void showPicturePicker(View view){
PicturePickerDialog picturePickerDialog = new PicturePickerDialog(this);
picturePickerDialog.show(new PicturePickerDialog.PicturePickerCallBack() {
@Override
public void onPhotoClick() {
Toast.makeText(mContext,"拍 照",Toast.LENGTH_SHORT).show();
}
@Override
public void onAlbumClick() {
Toast.makeText(mContext,"相册选择",Toast.LENGTH_SHORT).show();
}
});
}
}
优快云下载地址:
http://download.youkuaiyun.com/detail/u013653230/9603210