您的位置:首页 > 移动开发 > Android开发

Android 动态添加自定义式样的按钮

2012-12-26 14:53 381 查看
有时候根据项目需求需要动态地增加控件.

比如根据一种商品的可支付方式,动态地添加支付手段的按钮.

实现起来比较容易,唯一要注意的是,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.csdn.net/detail/singleton1900/4930004
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: