自定义控件之流式布局

本文介绍了一种自定义Android视图SelfView的实现方式,该控件能够动态加载和展示列表数据,通过LinearLayout进行布局调整,适用于需要灵活显示字符串列表的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义控件 

public class SelfView extends RelativeLayout {

    private Context mcontext;
    private LinearLayout layoutall;
    private List<String> datas = new ArrayList<>();
    private LinearLayout linearhor;

    public SelfView(Context context) {
        super(context);
        init(context);
    }

    public SelfView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public SelfView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        this.mcontext = context;
        //初始化控件
        View view = View.inflate(mcontext, R.layout.layout_slfelayout, null);
        //初始化主布局
        layoutall = view.findViewById(R.id.layout_all);
        this.addView(view);
    }

    public void setData(List<String> data) {
        datas = data;
        setList(data);
    }

    private void setList(List<String> list) {

        layoutall.removeAllViews();
        //创建第二的布局
        linearhor = (LinearLayout) View.inflate(mcontext, R.layout.layout_slfe_h, null);

        layoutall.addView(linearhor);
        linearhor.removeAllViews();

        int len = 0;
        for (int i = 0; i < list.size(); i++) {
            String data = list.get(i);
            len += data.length();
            if (len > 22) {
                linearhor = (LinearLayout) View.inflate(mcontext, R.layout.layout_slfe_h, null);
                layoutall.addView(linearhor);
                len = 0;
            }
            View viewtxt = View.inflate(mcontext, R.layout.layout_self_image, null);
            TextView txt = viewtxt.findViewById(R.id.show_text);
            txt.setText(data);
            Log.d("Tag", data + ">>>>");
            linearhor.addView(viewtxt);
            LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewtxt.getLayoutParams();
            layoutParams.weight = 1;
            layoutParams.topMargin = 10;
            layoutParams.leftMargin = 10;
            layoutParams.rightMargin = 10;
            viewtxt.setLayoutParams(layoutParams);
        }
    }
}

布局1:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

</LinearLayout>

 布局2:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/layout_all"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"></LinearLayout>

</LinearLayout>

布局3:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">

    <TextView
        android:id="@+id/show_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/yuan"
        android:text="@string/app_name"
        android:textSize="20sp" />

</RelativeLayout>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值