Android 流式布局实现方法

发布时间:2019-06-16 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 流式布局实现方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

android本身并不提供流式布局,有一类需求,如淘宝客户端中选择商品的款式时,款式的按钮根据其文字不同而长度变化,并且不同的手机屏幕的度也不同,想要实现流式地排版按钮,就需要动态地添加和判断了。

本文提供了一种简单的流式布局实现方法,非封装的控件,但简单实用。

这里隐藏的数据格式细节,不贴出全部代码

首选,我们对于正式的界面有一个布局,但是我们为了测试这个布局,需要把这个XMl重新inflate出来,把控件加进去,才能够测出控件的长度。

以下的代码把当前界面的layout重复地inflate出来,作为样例

    sampleView = (View) LayoutInflater.From(StyleSelectActivITy.this).inflate(
                R.layout.activity_common_select_style, null);
    sampleTv = (TextView) sampleView.findViewById(R.id.sample_text);
    sampleContainer = (LinearLayout) sampleView.findViewById(R.id.rl_sale_style_content);
    sampleDivide = (View) sampleView.findViewById(R.id.view_divider1);

当我们要添加一个TextView时:
(1)使用sample控件先设置标签
(2)在sampleView中测量sample控件的长度
(3)加上需要的margin长度(注意要转化成px)
(4)判断当前行剩余的长度,能否容纳这个标签,如果能,则新建一个tv加入当前行的linearlayout中,否则,新建一个linearlayout,加入到下一行,把剩余长度更新为控件宽度

// 机智地测试它的宽度
    sampleTv.setText("一个动态长度的标签");

    int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    sampleTv.measure(w, h);
    int width = sampleTv.getMeasuredWidth();

// 转成px
    int margin = (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, this.getResources()
                .getDisplayMetrics()));

    if (width + margin < tmpLen) {
            ll.addView(tv);
            tmpLen -= width + margin;
    } else {
            rl_sale_style_content.addView(ll);
            ll = getNewLL();
            ll.addView(tv);
            tmpLen = len - width - margin;
    }

剩下的事情,只需要把表现用数组管理起来,控制他们的状态,点击事件就行了。


文章原创转载请注明出处。

脚本宝典总结

以上是脚本宝典为你收集整理的Android 流式布局实现方法全部内容,希望文章能够帮你解决Android 流式布局实现方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。