ShapeDrawable
用来自定义一些样式,如按钮点击按下,CheckBox的选择,进度条的背景和进度等。
Shape 标签
可以用来定义边框,圆角,梯度渐变色。
一般用于Button,或Layout背景。
shape:指定形状
矩形:rectangle
椭圆:oval
横线:line
圆环:ring
solid:指定shape中填充的颜色
stroke:指定shape的边框
描边的颜色:android:color
描边的宽度:android:width
组成虚线的线段的宽度:android:dashWidth
组成虚线的线段之间的间隔: android:dashGap
corners:指定矩形四个角的圆角程度
给四个角设置相同的角度:android:radius
设定左下角的角度:android:bottomLeftRadius
设定右下角的角度:android:bottomRightRadius
设定左上角的角度:android:TopLeftRadius
设定右上角的角度:android:TopRightRadius
gradient:指定填充颜色的渐变
渐变类别:android:type
linear(线性渐变)、radial(径向渐变)、sweep(扫描线渐变,默认为linear
渐变的角度:android:angle
默认为0,其值必须是45的倍数,0表示从左到右,90表示从下到上
selector 标签
用来控制选中按钮状态的改变
-
-
控制按钮文本按下后的状态改变
CheckBox选中状态的改变
引用
layer-list 标签
阴影效果,重要!
进度条背景进度的改变
引用
帧动画
选择 animation-list 标签
AndroidStudio下只有在 Drawable 文件夹下有选择。
在控件引用
代码控制开启动画
private void AlertDemo() {
btn = (Button) findViewById(R.id.btn);
img = (ImageView) findViewById(R.id.img);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//getDrawable()拿到图片src
AnimationDrawable anim = (AnimationDrawable) img.getDrawable();
anim.start();
}
});
}
风格与主题
统一管理View的风格和系统的主题样式
在values下的styles操作
操作控件样式
在Layout.xml中引用设定的样式
如果想修改App整体的样式风格
在AndroidManifest.xml的Theme中引用样式
AlertDialog
普通对话框
private void showDialog() {
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("标题")
.setMessage("提示消息")
.setIcon(R.mipmap.ic_launcher_round)
.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNeutralButton("其他", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create();
dialog.show();
}
private void showDialog() {
final String[] options = {"item1", "item2", "item3"};
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("单选")
.setSingleChoiceItems(options, 0,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String item = options[which];
Toast.makeText(mContext, item, Toast.LENGTH_SHORT).show();
}
})
.create();
dialog.show();
}
private void showDialog() {
final String[] options = {"item1", "item2", "item3"};
final boolean[] isCheck = {true, false, false};
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("多选")
.setMultiChoiceItems(options, isCheck,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
isCheck[which] = isChecked;
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String resCheck = "";
for (int i = 0; i < isCheck.length; i++) {
if (isCheck[i]) {
resCheck += options[i] + "\r\n";
}
}
Toast.makeText(mContext, resCheck, Toast.LENGTH_SHORT).show();
}
})
.create();
dialog.show();
}
进度条对话框
private void showDialog() {
final ProgressDialog dialog = new ProgressDialog(this);
// dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// dialog.setMax(100);
// dialog.setProgress(100);
// dialog.setSecondaryProgress(80);
// dialog.setCancelable(false);
dialog.setMessage("提示信息");
dialog.show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
dialog.dismiss();
}
}, 2000);
}