Android动态标签选项列表效果的实现

很多时候我们,我们会用到动态标签,而安卓并未提供一个直接方法,可以让动态标签换行,经过参照网上代码,做出以下效果。

动态标签选项

java代码

        int size = testName.length; // 添加Button的个数
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); // 每行的水平LinearLayout
        layoutParams.setMargins(10, 3, 10, 3); 
        ArrayList<Button> childBtns = new ArrayList<Button>();
        int totoalBtns = 0;
        for (int i = 0; i < size; i++) {
            String item = testName[i];
            LinearLayout.LayoutParams itemParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            int length = item.length();
            if (length < 4) { // 根据字数来判断按钮的空间长度, 少于4个当一个按钮
                itemParams.weight = 1;
                totoalBtns++;
            } else if (length < 8) { // <8个两个按钮空间
                itemParams.weight = 2;
                totoalBtns += 3;
            } else if (length < 12) {
                itemParams.weight = 3;
                totoalBtns += 4;
            }else{
                itemParams.weight = 4;
                totoalBtns += 5;
            }
            itemParams.width = 0;
            itemParams.setMargins(5, 15, 5, 15);
            Button childBtn = (Button) LayoutInflater.from(this).inflate(R.layout.item_button, null);
            childBtn.setText(item);
            final int j=i;
            childBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {}
            });
            childBtn.setTag(item);
            childBtn.setLayoutParams(itemParams);
            childBtns.add(childBtn);
            if (totoalBtns >= 5) {
                LinearLayout horizLL = new LinearLayout(this);
                horizLL.setOrientation(LinearLayout.HORIZONTAL);
                horizLL.setLayoutParams(layoutParams);
                for (Button addBtn : childBtns) {
                    horizLL.addView(addBtn);
                }
                parentLL.addView(horizLL);
                childBtns.clear();
                totoalBtns = 0;
            }
        }
        //最后一行添加一下
        if (!childBtns.isEmpty()) {
            LinearLayout horizLL = new LinearLayout(this);
            horizLL.setOrientation(LinearLayout.HORIZONTAL);
            horizLL.setLayoutParams(layoutParams);
            for (Button addBtn : childBtns) {
                horizLL.addView(addBtn);
            }
            parentLL.addView(horizLL);
            childBtns.clear();
            totoalBtns = 0;
        }

xml文件

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <LinearLayout
            android:id="@+id/contentviewlt"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

暂时没有整理成demo,如需demo,请留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值