转发地址: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; } } }