android布局优化技巧,Android布局优化

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

收集一些布局优化技巧,持续更新……

include标签

可以复用布局,统一修改管理,典型的比如标题栏,也可以在标签中重新设置layout属性

merge标签

用来去除不必要的视图层级

如果仅仅是添加子视图到父视图进行显示,而不指定任何针对父视图的布局属性,可以使用

另外,假如需要在LinearLayout里面嵌入一个布局,而恰恰这个布局的根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度,也需要使用

标签只能作为xml的根元素

TextView同时显示文字与图片

一般是一个ImageView加一个TextView,其实可以用TextView直接搞定public void setCompoundDrawables(@Nullable Drawable left, @Nullable Drawable top, @Nullable Drawable right, @Nullable Drawable bottom);

设置四个方向的drawablepublic void setCompoundDrawablePadding(int pad);

设置图片和文字的距离

利用TextView的行间距

android:lineSpaceingExtra属性可以改变行间距,还有android:lineSpacingMultiplier设定行距倍数

遇到多行文本,行间有一定距离的场景,就不需要多个TextView了

一个TextView中不同的样式

如果一段文字中有多种样式,一般就是分成几个TextView去做

但是也可以通过Spannable或Html.fromHtml()实现String text;

SpannableStringBuilder style = new SpannableStringBuilder(text);

SpannableStringBuilder.setSpan()public void setSpan(Object what, int start, int end, int flags);

设置的东西都是CharacterStyle的子类,比如AbsoluteSizeSpan定义字体大小,ForegroundColorSpan定义字体颜色等等

CharacterStyleForegroundColorSpan

MaskFilterSpan

SuggestionSpan

RasterizerSpan

BackgroundColorSpan

StrikethroughSpan

UnderlineSpan

ClickableSpanURLSpan

MetricAffectingSpanSubscriptSpan

StyleSpan

AbsoluteSizeSpan

RelativeSizeSpan

TextAppearanceSpan

SuperscriptSpan

LocaleSpan

ScaleXSpan

TypefaceSpan

ReplacementSpanDynamicDrawableSpan

最后设置给TextViewmTextView.setText(style);

ViewStub

ViewStub是个轻量级的View,不占用布局位置,可以实现按需加载,比如网络请求失败的提示页面

一旦ViewStub可见或是被inflate()了,它就不存在了,被获得的View取代

LinearLayout的分割线

比如两个按钮之间的一道分割线,一般都是用一个View,也可以直接使用LinearLayout的android:divider属性,android:showDividers可以设置显示位置,android:dividerPadding可以设置内边距

Space

要为布局间添加间距,可以通过添加一个空的View,也可以通过设置margin,但前者影响性能,后者影响可读性,这时可以使用Space,它也很轻量

移除不必要的背景

过多的背景叠加会导致过度绘制,会影响性能假设我们的Activity背景是白色,Activity的布局最终会加入DecorView中,那么这个View中的背景就没必要了,通过下面的代码getWindow().setBackgroundDrawable(null);

使用TextSwitcher和ImageSwitcher平滑过渡

很多时候文字改变的时候希望不那么突兀,平滑一点,可以使用这些类

使用TextSwitcher获得TextSwitcher对象

通过setFactory()设置ViewFactory,实现makeView()方法,返回实际的TextView

通过setInAnimation()设置换入动画

通过setOutAnimation()设置换出动画

ImageSwitcher也是同样的用法

这两个控件的目的是使过度更自然,代码更易读,因此不要滥用它们

在onCreate中获得视图的宽高

在onCreate()中调用getWidth()和getHeight()获得的都是0,可以使用post()方法view.post(new Runnable() {

@Override

public void run() {

int height = view.getHeight();

int width = view.getWidth();

}

});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值