android 用自定义样式设计界面,Android自定义多功能样式Dialog

最近业务需要Dialog,可以显示图标,或者标题,按钮只显示一个或者2个,为了适应需求自定义一个Dialog以满足需求。效果如下:

b48da813acf5

带图片无标题的单个按钮对话框

b48da813acf5

有标题不带图片的对话框

先定义Dialog样式:

@android:color/transparent

true

@null

true

true

再去定义对话框的布局,首先来个圆角背景:

android:width="0.8dp"

android:color="#ffffff" />

布局:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:minWidth="260dp"

android:layout_centerInParent="true"

android:paddingTop="16dp"

android:background="@drawable/bg_dialog"

android:orientation="vertical">

android:id="@+id/title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_marginLeft="16dp"

android:layout_marginRight="16dp"

android:layout_marginBottom="16dp"

android:gravity="center"

tools:text="消息提示"

android:visibility="visible"

android:textColor="#333333"

android:textSize="18sp" />

android:id="@+id/image"

tools:src="@mipmap/p1"

android:layout_gravity="center"

android:maxHeight="150dp"

android:maxWidth="150dp"

android:layout_marginBottom="10dp"

android:layout_marginLeft="16dp"

android:layout_marginRight="16dp"

android:visibility="visible"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/message"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center|left"

android:layout_marginLeft="20dp"

android:layout_marginRight="20dp"

android:lineSpacingExtra="3dp"

android:lineSpacingMultiplier="1.2"

android:textSize="14dp"

android:textColor="#999999"

tools:text="提示消息提示消息提示消息提示消息提示消息提示消息提示消息提示消息" />

android:layout_width="match_parent"

android:layout_height="1px"

android:layout_marginTop="16dp"

android:background="#E4E4E4" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/negtive"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginLeft="10dp"

android:paddingTop="16dp"

android:paddingBottom="16dp"

android:layout_weight="1"

android:background="@null"

android:gravity="center"

android:singleLine="true"

tools:text="No"

android:textColor="#999999"

android:textSize="16sp" />

android:id="@+id/column_line"

android:layout_width="1px"

android:layout_height="match_parent"

android:background="#E4E4E4" />

android:id="@+id/positive"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_marginRight="10dp"

android:layout_weight="1"

android:paddingTop="16dp"

android:paddingBottom="16dp"

android:background="@null"

android:gravity="center"

android:singleLine="true"

tools:text="Yes"

android:textColor="#38ADFF"

android:textSize="16sp" />

最后送上Dialog源码,注释已经写得很清楚了,不用多解释了:

import android.app.Dialog;

import android.content.Context;

import android.os.Bundle;

import android.text.TextUtils;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

import com.wzh.myapplication.R;

/**

* author:Administrator on 2016/12/16 16:01

* description:自定义dialog

* version:版本

*/

public class CommonDialog extends Dialog {

/**

* 显示的图片

*/

private ImageView imageIv ;

/**

* 显示的标题

*/

private TextView titleTv ;

/**

* 显示的消息

*/

private TextView messageTv ;

/**

* 确认和取消按钮

*/

private Button negtiveBn ,positiveBn;

/**

* 按钮之间的分割线

*/

private View columnLineView ;

public CommonDialog(Context context) {

super(context, R.style.CustomDialog);

}

/**

* 都是内容数据

*/

private String message;

private String title;

private String positive,negtive ;

private int imageResId = -1 ;

/**

* 底部是否只有一个按钮

*/

private boolean isSingle = false;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.common_dialog_layout);

//按空白处不能取消动画

setCanceledOnTouchOutside(false);

//初始化界面控件

initView();

//初始化界面数据

refreshView();

//初始化界面控件的事件

initEvent();

}

/**

* 初始化界面的确定和取消监听器

*/

private void initEvent() {

//设置确定按钮被点击后,向外界提供监听

positiveBn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if ( onClickBottomListener!= null) {

onClickBottomListener.onPositiveClick();

}

}

});

//设置取消按钮被点击后,向外界提供监听

negtiveBn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if ( onClickBottomListener!= null) {

onClickBottomListener.onNegtiveClick();

}

}

});

}

/**

* 初始化界面控件的显示数据

*/

private void refreshView() {

//如果用户自定了title和message

if (!TextUtils.isEmpty(title)) {

titleTv.setText(title);

titleTv.setVisibility(View.VISIBLE);

}else {

titleTv.setVisibility(View.GONE);

}

if (!TextUtils.isEmpty(message)) {

messageTv.setText(message);

}

//如果设置按钮的文字

if (!TextUtils.isEmpty(positive)) {

positiveBn.setText(positive);

}else {

positiveBn.setText("确定");

}

if (!TextUtils.isEmpty(negtive)) {

negtiveBn.setText(negtive);

}else {

negtiveBn.setText("取消");

}

if (imageResId!=-1){

imageIv.setImageResource(imageResId);

imageIv.setVisibility(View.VISIBLE);

}else {

imageIv.setVisibility(View.GONE);

}

/**

* 只显示一个按钮的时候隐藏取消按钮,回掉只执行确定的事件

*/

if (isSingle){

columnLineView.setVisibility(View.GONE);

negtiveBn.setVisibility(View.GONE);

}else {

negtiveBn.setVisibility(View.VISIBLE);

columnLineView.setVisibility(View.VISIBLE);

}

}

@Override

public void show() {

super.show();

refreshView();

}

/**

* 初始化界面控件

*/

private void initView() {

negtiveBn = (Button) findViewById(R.id.negtive);

positiveBn = (Button) findViewById(R.id.positive);

titleTv = (TextView) findViewById(R.id.title);

messageTv = (TextView) findViewById(R.id.message);

imageIv = (ImageView) findViewById(R.id.image);

columnLineView = findViewById(R.id.column_line);

}

/**

* 设置确定取消按钮的回调

*/

public OnClickBottomListener onClickBottomListener;

public CommonDialog setOnClickBottomListener(OnClickBottomListener onClickBottomListener) {

this.onClickBottomListener = onClickBottomListener;

return this;

}

public interface OnClickBottomListener{

/**

* 点击确定按钮事件

*/

public void onPositiveClick();

/**

* 点击取消按钮事件

*/

public void onNegtiveClick();

}

public String getMessage() {

return message;

}

public CommonDialog setMessage(String message) {

this.message = message;

return this ;

}

public String getTitle() {

return title;

}

public CommonDialog setTitle(String title) {

this.title = title;

return this ;

}

public String getPositive() {

return positive;

}

public CommonDialog setPositive(String positive) {

this.positive = positive;

return this ;

}

public String getNegtive() {

return negtive;

}

public CommonDialog setNegtive(String negtive) {

this.negtive = negtive;

return this ;

}

public int getImageResId() {

return imageResId;

}

public boolean isSingle() {

return isSingle;

}

public CommonDialog setSingle(boolean single) {

isSingle = single;

return this ;

}

public CommonDialog setImageResId(int imageResId) {

this.imageResId = imageResId;

return this ;

}

}

好了,下面就是使用了:

private void initDialog() {

final CommonDialog dialog = new CommonDialog(MainActivity.this);

dialog.setMessage("对于一个在北平住惯的人,像我,冬天要是不刮风,便觉得是奇迹;济南的冬天是没有风声的。")

.setImageResId(R.mipmap.ic_launcher)

// .setTitle("系统提示")

.setSingle(true).setOnClickBottomListener(new CommonDialog.OnClickBottomListener() {

@Override

public void onPositiveClick() {

dialog.dismiss();

Toast.makeText(MainActivity.this,"xxxx",Toast.LENGTH_SHORT).show();

}

@Override

public void onNegtiveClick() {

dialog.dismiss();

Toast.makeText(MainActivity.this,"ssss",Toast.LENGTH_SHORT).show();

}

}).show();

}

显示什么就设置什么 ~ 是不是很简单?不过谷歌官方推荐使用DialogFragment去实现Dialog,因为DialogFragment有生命周期使用起来更加强大和方便,有机会再使用吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值