有时候根据项目需求需要动态地增加控件.
比如根据一种商品的可支付方式,动态地添加支付手段的按钮.
实现起来比较容易,唯一要注意的是,button外要嵌套一层linearlayout以控制按钮所在位置.
而自定义的按钮样式可以通过selector来实现.
整个Demo工程结构如下:
动态增加按钮的代码:
package com.harlan.demo.activity;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
public class DynBtnActivity extends Activity
{
private LinearLayout mBtnRoot;
private ArrayList<String> Array;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnRoot = (LinearLayout)findViewById(R.id.btn_lay);
initArray();
addBtn();
}
private void initArray()
{
Array = new ArrayList<String>();
Array.add("BTN01");
Array.add("BTN02");
Array.add("BTN03");
Array.add("BTN04");
Array.add("BTN05");
Array.add("BTN06");
}
private void addBtn()
{
for (int i = 0; i < Array.size(); i++)
{
LinearLayout linearLayout = new LinearLayout(getApplicationContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(200, LayoutParams.WRAP_CONTENT);
lp.setMargins(0, 10, 0, 10);
linearLayout.setLayoutParams(lp);
Button button = new Button(getApplicationContext());
LayoutParams layoutParams = new LayoutParams(200, LayoutParams.WRAP_CONTENT);
button.setLayoutParams(layoutParams);
button.setText(Array.get(i));
button.setTextColor(Color.WHITE);
button.setBackgroundResource(R.drawable.button_selector);
linearLayout.addView(button);
mBtnRoot.addView(linearLayout);
}
}
}
button_selector的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<gradient android:angle="90" android:endColor="#ffa33d" android:startColor="#ff7c00" />
<stroke android:width="1dip" android:color="#fd9417" />
<corners android:radius="5dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient android:angle="90" android:endColor="#fcd673" android:startColor="#eb9212" />
<stroke android:width="1dip" android:color="#dc6b00" />
<corners android:radius="5dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
<item>
<shape>
<gradient android:angle="90" android:endColor="#6f859c" android:startColor="#25486e" />
<stroke android:width="1dip" android:color="#06274a" />
<corners android:radius="5dip" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
</selector>
其中:
gradient:渐变
android:startColor:起始颜色;android:endColor结束颜色,android:angle:渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。
stroke:描边
android:width:描边的宽度,android:color: 描边的颜色。
描边可以做成虚线的式,设置方式为:android:dashWidth:一个横线的宽度;android:dashGap:之间隔开的距离.
corners:圆角
android:radius:角的弧度,值越大角越圆。
padding:内间距
Demo下载地址:http://download.youkuaiyun.com/detail/singleton1900/4930004