AlertDialog
在开发中很常用,v7
包中的AlertDialog
界面清爽美观,能满足大多数开发需求,但是有时还是需要更加个性化的需求,比如设置AlertDilog
字体大小,颜色等属性。网上有不少文章这方面的文章,一般采用style或者反射来设置,本篇文章是参照源码拿到AlertDialog
元素具体的控件对相应的元素进行设置。效果图:
项目地址 https://github.com/yannecer/NDialog
使用方法
Gradle
compile 'com.necer.ndialog2:ndialog:1.0.2'
确认提示框
new NDialog(this)
.setTitle("我是标题")
.setTitleColor(Color.parseColor("#00c8aa"))
.setTitleSize(18)
.setTitleCenter(false)
.setMessageCenter(false)
.setMessage("我是meaasge")
.setMessageSize(16)
.setMessageColor(Color.parseColor("#00ff00"))
.setNegativeTextColor(Color.parseColor("#000000"))
.setPositiveTextColor(Color.parseColor("#ff0000"))
.setButtonCenter(false)
.setButtonSize(14)
.setCancleable(true)
.setOnConfirmListener(new NDialog.OnConfirmListener() {
@Override
public void onClick(int which) {
//which,0代表NegativeButton,1代表PositiveButton
Toast.makeText(MainActivity.this, "点击了::" + which, Toast.LENGTH_SHORT).show();
}
}).create(NDialog.CONFIRM).show();
输入框
new NDialog(this).setTitle("请输入。。。")
.setInputHintText("hint")
.setInputHintTextColor(Color.parseColor("#c1c1c1"))
.setInputText("")
.setInputTextColor(Color.parseColor("#333333"))
.setInputTextSize(14)
.setInputType(InputType.TYPE_CLASS_TEXT)
.setInputLineColor(Color.parseColor("#00ff00"))
.setPositiveButtonText("确定")
.setNegativeButtonText("取消")
.setNegativeTextColor(Color.parseColor("#c1c1c1"))
.setOnInputListener(new NDialog.OnInputListener() {
@Override
public void onClick(String inputText, int which) {
//which,0代表NegativeButton,1代表PositiveButton
Toast.makeText(MainActivity.this, "输入了::" + inputText, Toast.LENGTH_SHORT).show();
}
}).create(NDialog.INPUT).show();
选择框
new NDialog(this)
.setItems(new String[]{"aaa", "bbb", "ccc", "ddd"})
.setItemGravity(Gravity.LEFT)
.setItemColor(Color.parseColor("#000000"))
.setItemHeigh(50)
.setItemSize(16)
.setDividerHeigh(1)
.setAdapter(null)
.setDividerColor(Color.parseColor("#c1c1c1"))
.setHasDivider(true)
.setOnChoiceListener(new NDialog.OnChoiceListener() {
@Override
public void onClick(String item, int which) {
Toast.makeText(MainActivity.this, "选择了::" + item, Toast.LENGTH_SHORT).show();
}
}).create(NDialog.CHOICE).show();
支持的属性:
属性 | 描述 |
---|---|
NDialog.CONFIRM | 构建确认提示弹窗 |
NDialog.INPUT | 构建输入弹窗 |
NDialog.CHOICE | 构建选择弹窗 |
positiveButtonText | positive按钮文本 |
positiveTextColor | positive按钮文本颜色 |
negativeButtonText | negative按钮文本 |
negativeTextColor | negative按钮文本颜色 |
buttonSize | positive和negative按钮大小 |
isButtonCenter | positive和negative按钮是否居中 |
message | 确认提示弹窗message文本 |
messageSize | 确认提示弹窗message字体大小 |
messageColor | 确认提示弹窗message字体颜色 |
isMessageCenter | 确认提示弹窗message是否居中 |
title | title文本 |
titleSize | positive文本大小 |
titleColor | title文本颜色 |
isTitleCenter | title是否居中 |
inputText | 输入框预输入文本 |
inputTextSize | 输入框预输入文本字体大小 |
inputTextColor | 输入框预输入文本字体颜色 |
inputHintText | 输入框hint |
inputHintTextColor | 输入框hint文本字体颜色 |
inputType | 输入框输入类型 |
hasDivider | 选择框是否要分割线 |
dividerHeigh | 选择框分割线高度 |
dividerColor | 选择框分割线颜色 |
items | 选择框选择的item |
itemColor | 选择框item字体颜色 |
itemSize | 选择框item字体大小 |
itemGravity | 选择框item位置 |
itemHeigh | 选择框item高度 |
cancleable | 弹窗是否可取消 |
通过 create(int type)
构建不用的dialog,目前有三种
CONFIRM,INPUT,CHOICE
。
原理
确认提示框 :在 Dialog OnShowListener
回调中,得到 title 、meaasge
等具体的控件,再设置属性,具体参见从源码看 AlertDialog.getButton(DialogInterface.BUTTON_POSITIVE) 为什么是 null。
输入框:通过给AlertDialog
设置了一个带EditText
的view
实现输入框的需求。
选择框:通过给AlertDialog
设置了一个带ListView
的view
实现列表展示的功能,也可以给选择框设置一个自定义的 BaseAdapter
,实现更个性化的效果。
项目地址: NDialog https://github.com/yannecer/NDialog