android動態設定配置項並隨機排布並實現多選
阿新 • • 發佈:2019-02-15
效果如下:
首先佈局是這樣的,只有一個自定義的控制元件的FlowLayout
活動頁面,實現了兩種方法<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.example.zza_android_test7.FlowLayout android:id="@+id/flow" android:layout_width="match_parent" android:layout_height="match_parent" > </com.example.zza_android_test7.FlowLayout> </RelativeLayout>
package com.example.zza_android_test7; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.widget.CheckBox; import android.widget.LinearLayout; import com.example.zza_android_test7.FlowLayout.LayoutParams; public class MainActivity extends Activity { private FlowLayout flow; private List<String> dataList; private int dip2px; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dip2px = DensityUtil.dip2px(this, 10); getData(); flow = (FlowLayout) findViewById(R.id.flow); // dynamicSetText(); dynamicSetText2(); } /** * 動態設定配置項 */ @SuppressWarnings("deprecation") public void dynamicSetText() { /** * 佈局中已經有FlowLayout這個控制元件了,但是這裡為什麼還要巢狀在CheckBox上再巢狀一層FlowLayout呢? * 因為FlowLayout中子控制元件是MarginLayoutParams, * 所以不管是FlowLayout再作為子控制元件還是CheckBox必須是MarginLayoutParams */ FlowLayout.LayoutParams lp = new FlowLayout.LayoutParams( FlowLayout.LayoutParams.WRAP_CONTENT, FlowLayout.LayoutParams.WRAP_CONTENT); lp.leftMargin = DensityUtil.dip2px(this, 10); lp.rightMargin = DensityUtil.dip2px(this, 10); lp.topMargin = DensityUtil.dip2px(this, 5); lp.bottomMargin = DensityUtil.dip2px(this, 5); for (int i = 0; i < dataList.size(); i++) { String city = dataList.get(i); final CheckBox checkBox = new CheckBox(this); checkBox.setLayoutParams(new ViewGroup.LayoutParams( // ViewGroup.MarginLayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); checkBox.setPadding(dip2px, dip2px, dip2px, dip2px); checkBox.setBackgroundResource(R.drawable.selector_checkbox); checkBox.setButtonDrawable(getResources().getDrawable( android.R.color.transparent)); checkBox.setText(city); flow.addView(checkBox, lp); // 設定選擇後文字顏色變化 checkBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (checkBox.isChecked()) { checkBox.setTextColor(getResources().getColor( R.color.green)); } else { checkBox.setTextColor(getResources().getColor( R.color.black)); } } }); } } /** * 動態設定配置項 */ @SuppressWarnings("deprecation") public void dynamicSetText2() { /** * 佈局中已經有FlowLayout這個控制元件了,不需要再在CheckBox上巢狀一層FlowLayout呢, * 因為FlowLayout中子控制元件是MarginLayoutParams,所以CheckBox也要是MarginLayoutParams */ for (int i = 0; i < dataList.size(); i++) { String city = dataList.get(i); final CheckBox checkBox = new CheckBox(this); MarginLayoutParams mlp = new MarginLayoutParams( MarginLayoutParams.WRAP_CONTENT, MarginLayoutParams.WRAP_CONTENT); // 設定marginLeft/Right/Top/Bottom mlp.setMargins(dip2px, dip2px, dip2px, dip2px); checkBox.setLayoutParams(mlp); // 設定文字padding checkBox.setPadding(dip2px, dip2px, dip2px, dip2px); checkBox.setBackgroundResource(R.drawable.selector_checkbox); checkBox.setButtonDrawable(getResources().getDrawable( android.R.color.transparent)); checkBox.setText(city); flow.addView(checkBox); // 設定選擇後文字顏色變化 checkBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (checkBox.isChecked()) { checkBox.setTextColor(getResources().getColor( R.color.green)); } else { checkBox.setTextColor(getResources().getColor( R.color.black)); } } }); } } public List<String> getData() { dataList = new ArrayList<String>(); dataList.add("南京"); dataList.add("北京"); dataList.add("連雲港"); dataList.add("青島"); dataList.add("麗江"); dataList.add("漠河"); dataList.add("重慶"); return dataList; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
下載地址