Android动态生成按钮样式

动态生成按钮样式

使用:

    int borderColor = Color.parseColor("#2E3135");
    int bgColor = Color.parseColor("#00FF00");

    // 设置View背景样式,有边框宽度、边框颜色、圆角度数、背景颜色。
    GradientDrawable shape = DrawableUtils.createShape(1, 4, borderColor, bgColor);
    btn1.setBackground(shape);

    int textNormalColor = Color.parseColor("#2E3135");
    int textPressColor = Color.parseColor("#FF0000");
    int textFocusColor = Color.parseColor("#00FF00");
    int textEnableColor = Color.parseColor("#0000FF");

    // 设置文本点击样式切换
    ColorStateList colorStateList = DrawableUtils.createColorStateList(textNormalColor, textPressColor, textFocusColor, textEnableColor);
    btn2.setTextColor(colorStateList);
    /* android:focusableInTouchMode="true" 控件默认获取焦点 */

    int color1 = Color.parseColor("#FF0000");
    int color2 = Color.parseColor("#00FF00");

    // 设置View点击样式切换
    GradientDrawable unSelected = DrawableUtils.createShape(1, 4, color1, color2);
    GradientDrawable selected = DrawableUtils.createShape(1, 4, color2, color1);
    StateListDrawable stateListDrawable = DrawableUtils.createStateListDrawable(unSelected, selected);
    btn3.setBackground(stateListDrawable);

工具类:

public class DrawableUtils {

    /**
     * 创建一个shape
     *
     * @param strokeWidth 边框宽度(px)
     * @param roundRadius 圆角半径(px)
     * @param strokeColor 边框颜色
     * @param fillColor   内部填充颜色
     * @return GradientDrawable
     */
    public static GradientDrawable createShape(int strokeWidth, int roundRadius, int strokeColor, int fillColor) {
        GradientDrawable gd = new GradientDrawable();
        gd.setColor(fillColor);
        gd.setCornerRadius(roundRadius);
        gd.setStroke(strokeWidth, strokeColor);
        return gd;
    }

    /**
     * 创建按钮文字点击样式
     *
     * @param normal  正常样式
     * @param pressed 按下样式
     * @param focused 焦点样式
     * @param unable  不可用样式
     * @return ColorStateList
     */
    public static ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) {
        int[] colors = new int[]{pressed, focused, normal, focused, unable, normal};
        int[][] states = new int[6][];
        states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
        states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
        states[2] = new int[]{android.R.attr.state_enabled};
        states[3] = new int[]{android.R.attr.state_focused};
        states[4] = new int[]{android.R.attr.state_window_focused};
        states[5] = new int[]{};
        return new ColorStateList(states, colors);
    }

    /**
     * 创建按钮点击样式
     *
     * @param unSelected 未点击样式
     * @param selected 点击样式
     * @return StateListDrawable
     */
    public static StateListDrawable createStateListDrawable(GradientDrawable unSelected, GradientDrawable selected) {
        StateListDrawable drawable = new StateListDrawable();
        drawable.addState(new int[]{android.R.attr.state_pressed}, selected);
        drawable.addState(new int[]{-android.R.attr.state_pressed}, unSelected);
        return drawable;
    }

}

原文地址:http://blog.51cto.com/9098858/2097348

时间: 2024-10-28 21:40:22

Android动态生成按钮样式的相关文章

Android 动态生成布局 (多层嵌套)

Android 除了可以加载xml文件,显示布局外,也可以代码生成布局,并通过setContentView(View view)方法显示布局.单独的一层布局,如一个主布局加一个控件(如Button\imageView等)动态生成代码比较简单,下面只给出示例代码: package com.example.android_dongtaishengcheng; import android.os.Bundle; import android.app.Activity; import android.c

Android动态生成表格

最近刚刚学习完Android的五大布局,现在我们进一步深入学习,尝试做一个动态生成表格功能的例子 样式布局代码如下: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4

Android动态生成课程表 详解

根据提供的课程信息,动态生成课程表.不同于网上流传的课表形式,课程节数是固定,本课表的课程节数不固定. 1.效果图 每天共有12节课,上课节数每天都不同. 2.布局文件代码 周一到周日是  7个竖直线性布局文件,其他皆为辅助标题或序号. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools

asp.net动态生成按钮Button控件

1.动态生成button控件及响应服务端和客户端事件 void BindButtons(){ foreach (var item in items) { Button Btn = new Button(); Btn.OnClientClick = "showLoading();return true;"; //客户端事件 //Btn.Attributes.Add("OnClientClick ", "this.disabled=true;return tr

Android 动态生成对话框和EditText

/** * (获取输入) */ private void showInputDialog() { ScrollView scrollview = getInitView() ; final LinearLayout layout = (LinearLayout) scrollview.findViewById(30) ; new AlertDialog.Builder(this) .setTitle("请输入") .setIcon(android.R.drawable.ic_dialo

android动态生成界面、添加组件

效果图: layout界面布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:ad="http://schemas.android.com/apk/res/android" ad:layout_width="match_parent" ad:layout_height="match_parent" ad:orient

js动态生成按钮,页面用DIV简单布局

今天朋友让我忙帮给写个页面,由于时间紧破,所以没有完善,暂时先贴出来,以后有时间了在做修改 <!DOCTYPE html><html><head><title></title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" c

关于android 动态设置view 样式 问题(默认style)

解决方案一: Button btn=new Button(new ContextThemeWrapper(mContext,R.style.service_text_dialog_style),null,R.style.service_text_dialog_style); 解决方案二(待验证): <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://

Android 动态渐变按钮

先上个图 看着特别炫酷吧 其实就是自定义颜色两秒轮播动画 AnimationDrawable animationDrawable = (AnimationDrawable) button.getBackground();    //      animationDrawable.setEnterFadeDuration(2000);            animationDrawable.setExitFadeDuration(2000);            animationDrawab