您的位置:首页 > 产品设计 > UI/UE

【android】开发笔记系列UI篇

2015-07-02 13:38 585 查看

弹出View添加阴影效果

系统自带就有,在android studio上直接写入背景颜色

android:background="@android:drawable/dialog_holo_light_frame"


值得注意的是,这种阴影的尺寸,左右间隙之和是activity_horizontal_margin;上下:activity_vertical_margin

因此如果是对弹框尺寸比较敏感的(比如宽度和高度是手动计算的),在用了阴影背景之后记得给宽度或高度加上,上面一个margin的作为补偿哦。



四种样式供参考,2、3最常用



如何手动触发View的OnDraw事件

在UI线程,调用View的invalidate()方法。

非UI线程,调用View的postInvalidate()方法。

View的OnLongClickListener事件,返回true或者false的意思

返回true,表示点击事件,由我托管了,就不再往下传递了

返回false,表示执行了LongClick,还要再继续往下传递

颜色过渡动画

int colorFrom = Color.RED;
int colorTo = Color.GREEN;
int duration = 1000;
ObjectAnimator.ofObject(targetView, "backgroundColor", new ArgbEvaluator(), colorFrom, colorTo)
.setDuration(duration)
.start();


ListView布局

1:ListView的Item元素是没法使用layout_margin属性的。(可以使用recyclerView代替)

2:变通的办法是把分割线设置为透明,并且拉伸分割线的高度。达到item之间间距的效果。

android:divider="@null"
android:dividerHeight="14dp"


3:ListView设置marginTop会导致一段空白区域,滚动的item在此区域里不可见,解决办法是使用padding,并通知ListView在padding的区域里面绘制Item

android:paddingBottom="16dp"
android:paddingTop="16dp"
android:clipToPadding="false"


TextView限制行数,超出以"..."结尾

如:限制三行,超出末尾的地方用...代替

android:lines="3"
android:ellipsize="end"


TextView行高

如:每行之间额外增加6sp单位的高度

android:lineSpacingExtra="6sp"


TextView换行

代码中用 \n 就可以了

如果数据内容要被下个步骤html转义

那么直接使用<br/>

Text解析html字符

比如 ’ 符号,我们从服务端获取的数据是'

用安卓提供的方法就能把这些数据转义回html

.setText(Html.fromHtml("要解析的html脚本"));

TextView代码设置尺寸

1:尺寸写在dimen.xml文件里,只能获取px尺寸,比如

float mCategoryTextSize = getResources().getDimensionPixelSize(R.dimen.circle_category_item_text_size);
文本对象.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCategoryTextSize);


2:直接写sp、dp等尺寸

文本对象.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);


TextView跑马灯

textView原生就支持跑马灯效果,只要加入以下5个属性即可

android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"


textView一旦失去了焦点,就不会再滚动,此时调用textView或者父容器的RequestFocus(),可以让它继续跑起来

Canvas绘矩形图

在onDraw方法里,一些注意的地方

//实心用Fill,空心用STROKE
mPaint.setStyle(Paint.Style.FILL);

//Y轴是从上往下递增的,这个注意哦
canvas.drawRect(左上x, 左上y, 右下x, 右下y, 画笔对象);


弹出日历窗体

//1:调用
showDialog(DIALOG_DATE_PICKER);

//2:实现
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DATE_PICKER:
Calendar calendar = Calendar.getInstance();
DatePickerDialog pickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mEndYear = year;
mEndMonth = monthOfYear + 1;
mEndDay = dayOfMonth;
tvSetEndTime.setText(String.format("%d年%d月%d日", mEndYear, mEndMonth, mEndDay));
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));

//如果不能选择比当前日期更早的,需要-1秒,否则报错
pickerDialog.getDatePicker().setMinDate(new Date().getTime() - 1000L);
return pickerDialog;
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: