android 布局优化,Android常见 布局优化-Fun言

1.使用include 添加布局

xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”match_parent”

android:layout_height=”match_parent”>

layout=”@layout/title_bar”/>

用TextView同时显示图片和文字

这个我就不细说了,举一个我们项目中的一个例子,代码一看便知。

首先要完成的效果是如下图:

a9f48ef9b58566ad021c47b33fdaaa7b.png

<?xml version=”1.0″ encoding=”utf-8″?>

xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

android:drawableLeft=“@drawable/icon_1”

android:drawableRight=“@drawable/icon_4”

android:drawablePadding=“10dp”

android:paddingLeft=“10dp”

android:paddingRight=“10dp”

android:textSize=“16sp”

android:text=“我的卡券”

android:background=“@color/white”

android:gravity=“center_vertical”

android:layout_width=“match_parent”

android:layout_height=“50dp” />

使用Spannable或Html.fromHtml

这里也是举例说明,比如下图效果:

c0175e2cd662b422f017d27b58d91b02.png

如果实现上图红框中的效果,笨办法就是写三个TextView,“¥”,“价格”,“门市价”分别实现,其实用一个TextVIew就可以实现,类似如下代码:

String text = String.format("¥%1$s 门市价:¥%2$s", 18.6, 22);

int z = text.lastIndexOf("门");

SpannableStringBuilder style = new SpannableStringBuilder(text);

style.setSpan(new AbsoluteSizeSpan(DisplayUtil.dip2px(mContext,14)), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //字号

style.setSpan(new ForegroundColorSpan(Color.parseColor("#afafaf")), z, text.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //颜色

style.setSpan(new AbsoluteSizeSpan(DisplayUtil.dip2px(mContext,14)), z, text.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //字号

tv.setText(style);

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

同样Html.fromHtml也可以实现。这样不就减少了两个TextView了。

按需载入

ViewStub

在开发中经常会遇到这样的情况,会在程序运行时动态根据条件来决定显示哪个View或某个布局。那么通常做法就是把用到的View都写在布局中,然后在代码中动态的更改它的可见性。但是它的这样仍然会创建View,会影响性能。

这时就可以用到ViewStub了,ViewStub是一个轻量级的View,不占布局位置,占用资源非常小。

例子:比如我们请求网络加载列表,如果网络异常或者加载失败我们可以显示一个提示View,上面可以点击重新加载。当然一直没有错误时,我们就不显示。

……

1

2

3

4

5

6

7

8

9

10

11

12

13

1

2

3

4

5

6

7

8

9

10

11

12

13

hint_view.xml就是这个提示View,可以根据情况自己写。

用法:

private View hintView;

if (网络异常。。。) {

if (hintView == null) {

ViewStub viewStub = (ViewStub)this.findViewById(R.id.hint_view);

hintView = viewStub.inflate();

TextView textView = (TextView) hintView.findViewById(R.id.tv);

textView.setText("网络异常!");

}

hintView.setVisibility(View.VISIBLE);

}else{

if (hintView != null) {

hintView.setVisibility(View.GONE);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

用法很简单,记得一旦ViewStub可见或是被inflate了,ViewStub就不存在了,取而代之的是被inflate的Layout。所以它也被称做惰性控件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值