LinearLayout 动态添加子Button,并自动换行

来源:互联网 发布:js将集合转换为数组 编辑:程序博客网 时间:2024/06/05 22:48

转发地址:http://blog.csdn.net/tony2005/article/details/38414967

最近项目了需要如下图的搜索需求,网上找了些资料,要么太复杂,要么不符合要求。后来想了想,想到了一个非常便捷的方案。

在android 5.1上运行效果如图:


content_main.xml

<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/contentView"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#3DCE3D"    android:orientation="vertical"></LinearLayout>
button.xml

<?xml version="1.0" encoding="utf-8"?><Button xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/item_btn"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="注册"    android:textColor="#2B2D2C"    android:clickable="false"    android:singleLine="true"    android:paddingTop="8dp"    android:paddingBottom="8dp"    android:ellipsize="end"    android:background="#D5DEE7"    android:textSize="18dp" />

MainActivity.class

public class MainActivity extends AppCompatActivity{    private static String[] testName = {"日历","360","三国","消除","播放器",            "游戏", "清理大师", "跑酷","壁纸","单机斗地主",            "捕鱼达人3","雷电2014(雷霆版)","打车","输入法",            "动作","免费单机","手电筒","网游","视频","休闲","漫画",            "飞行射击","保卫萝卜","塔防","爸爸去哪儿2","中国象棋","宅女必备","三国",            "消除","跑酷","壁纸","单机斗地主","免费单机","手电筒"};    private LinearLayout contentView;    private View.OnClickListener btnOnClick;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.content_main);        contentView = (LinearLayout) findViewById(R.id.contentView);        initView();    }    private void initView(){        LinearLayout parentLL = (LinearLayout) contentView;  // contentView的布局        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+=2;            }else{                itemParams.weight = 3;                totoalBtns+=3;            }            itemParams.width = 0;            itemParams.setMargins(5, 5, 5, 5);            Button childBtn = (Button) LayoutInflater.from(this).inflate(R.layout.button, null);            childBtn.setText(item);//            childBtn.setOnClickListener(btnOnClick);            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;        }    }} 


0 2
原创粉丝点击