android---制作一个自定义button
来源:互联网 发布:usb无线网卡linux驱动 编辑:程序博客网 时间:2024/06/05 07:44
本人新手,刚学android。记录下一些容易忘记的东西,都是自己瞎琢磨理解的,不一定正确,往高手指正,同时,不建议其他新手参考(容易被带到沟里,慎看)
这是第一个博文,制作一个button。
1、先看怎么用它,将它放在布局文件中。
在main.xml中的某个位置:
<com.lei.widget.DimPanelBottomBar android:id="@+id/btn_bootom_bar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="8.0dip" custom:left_text="@string/cancel" custom:left_text_color="@color/button_cancel_color" custom:right_text="@string/confirm" custom:right_text_color="@color/button_confirm_color" />好了,我们可以看到它有几个属性是以custom开头的,它们是这个控件特有的东西,是我自定义添加进去的属性。好了,我们去valuse/attrs中定义这些特有的属性(show_my_style属性是多余定义的,暂时没有用到,不用理会)
<declare-styleable name="CusSetMonitorDistanceBar"> <attr name="leftText" format="string" /> <attr name="leftTextColor" format="string" /> <attr name="middleText" format="string" /> <attr name="middleTextColor" format="string" /> <attr name="rightTextColor" format="string" /> <attr name="rightText" format="string" /> <attr name="show_my_style" format="string" /> </declare-styleable>
可以看到这里的就是刚才特有属性被定义的地方,举例:leftText是String类型的。
那么这些特有的属性是怎么发挥作用的?建立一个
CusSetMonitorDistanceBar.java文件(代码中讲解更有效)
public class CusSetMonitorDistanceBar extends LinearLayout{public final static int LEFT_BUTTON = 0;public final static int MIDDLE_BUTTON = 1;public final static int RIGHT_BUTTON = 2;private OnItemClickListener myOnItemClickListener;private String mLeftText, mRightText;private int mLeftColor, mRightColor;private String myStyle;private Button leftBtn;private Button rightBtn;/* * 定义接口,以便可以像普通button一样在用到的地方可以添加点击事件 */public interface OnItemClickListener{public void onItemClickListener(int item);}public void setOnItemClickListener(OnItemClickListener l){myOnItemClickListener = l;}/* * 开始构造 */public CusSetMonitorDistanceBar(Context context, AttributeSet attrs) {super(context, attrs);/* * 在这里,我们让刚才定义的属性开始起作用哦。 *///从values/attrs中“获得”刚才定义的东东CusSetMonitorDistanceBar,它里面包含了我们定义的属性。 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CusSetMonitorDistanceBar, 0, 0); //从东东a中取出leftText属性,它返回一个String类型的数据,即左边按钮的文字。 mLeftText = a.getString(R.styleable.CusSetMonitorDistanceBar_leftText); mRightText = a.getString(R.styleable.CusSetMonitorDistanceBar_rightText); mLeftColor = a.getColor(R.styleable.CusSetMonitorDistanceBar_leftTextColor, 0xff000000); mRightColor = a.getColor(R.styleable.CusSetMonitorDistanceBar_rightTextColor, 0xff000000); //在values/dimens.xml中定义了button文字的大小,我们将它获取到, // 当然,也可以不去dimens中定义,直接在这里定义,例如size=20.0; //当然,也可以在定义特有属性时将文字大小定义为一个特有属性,在布局时传入(就像button文字颜色那样) float size = UtilsResources.getDimension(getContext(), R.dimen.click_button_text_size); // LEFT,定义左边button leftBtn = new Button(context); leftBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);//设置button文字大小// 设置左边button的样式,也就是它的形状,monitor_left_button_normal是在drawable文件中定义的xml文件,非常简单的哦,一会儿上代码 leftBtn.setBackgroundResource(R.drawable.monitor_left_button_normal);/* * 设置左边button文字的颜色,这个颜色值是通过自定义属性传进来的,也就是说我们在布局时用custom定义的颜色值通过attrs传到上面a中,再从a中取出放在mLeftColor,最后在这里进行最后的设置。 * 所有自定义的特有属性都是这个原理起作用的。 */ leftBtn.setTextColor(mLeftColor); leftBtn.setText(mLeftText);//同理mLeftColor// 我们这个view是继承LinearLayout的,设置Button在这个LinearLayout中如何分布,LinearLayout的大小是多少呢?就是布局时非custom属性中的android:layout_width和android:layout_height决定 LinearLayout.LayoutParams lp_left = new LayoutParams(0, LayoutParams.MATCH_PARENT);//填满整个LinearLayout,LinearLayout默认为horizon布局 lp_left.weight = 1;//比重,我们后面还有一个右边Button,它也是比重为1,所以两个平分了整个LinearLayout addView(leftBtn, lp_left); //将Button(leftBtn)按照lp_left定义的布局方式添加到LinearLayout中。 //给左边button添加点击事件 leftBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {if(myOnItemClickListener != null){myOnItemClickListener.onItemClickListener(LEFT_BUTTON);}} }); /* * 右边同理,不再赘述 */ //RIGHT rightBtn = new Button(context); rightBtn.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); if(myStyle != null){ if(myStyle.equalsIgnoreCase("dark")){ rightBtn.setBackgroundResource(R.drawable.monitor_right_button_pressed); } }else{ rightBtn.setBackgroundResource(R.drawable.monitor_right_button_normal); } rightBtn.setTextColor(mRightColor); rightBtn.setText(mRightText); LinearLayout.LayoutParams lp_right = new LayoutParams(0, LayoutParams.MATCH_PARENT); lp_right.leftMargin = -1; lp_right.weight = 1; addView(rightBtn, lp_right); rightBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {if(myOnItemClickListener != null){myOnItemClickListener.onItemClickListener(RIGHT_BUTTON);}} }); a.recycle();}public void setLeftBtnColor(int color){leftBtn.setTextColor(color);}public void setRightBtnColor(int color){rightBtn.setTextColor(color);}@Overridepublic void setEnabled(boolean enabled) {super.setEnabled(enabled);for(int i=0;i<this.getChildCount();i++){View v = this.getChildAt(i);v.setEnabled(enabled);}}}
刚才讲到的应该都明白了,唯一有一个东西没有讲,那就是button的形状
在drawable文件中创建monitor_left_button_normal.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 定义按下时的模样 --> <item android:state_pressed="true"> <shape > <!-- 设置填充颜色,就是button按下时的颜色 --> <solid android:color="@color/item_bg_pressed" /> <!-- 设置边界线的宽度和颜色,就是button轮廓线 --> <stroke android:width="@dimen/round_bg_stroke" android:color="@color/item_stroke" /> <!-- 左上角和左下角以5dip为半径画圆弧,不再是直棱角 --> <corners android:topLeftRadius="5dip" android:bottomLeftRadius="5dip" /> </shape> </item> <!-- 定义没有按时的模样 --> <item> <shape> <solid android:color="@android:color/white" /> <stroke android:width="@dimen/round_bg_stroke" android:color="@color/item_stroke" /> <corners android:topLeftRadius="5dip" android:bottomLeftRadius="5dip" /> </shape> </item></selector>
在main.java中:
mCusBar = (CusSetMonitorDistanceBar)mView.findViewById(R.id.btn_bootom_bar);mCusBar.setOnItemClickListener(new CusSetMonitorDistanceBar.OnItemClickListener() {@Overridepublic void onItemClickListener(int item) {ValueAnimator anim = null;switch(item){case CusSetMonitorDistanceBar.LEFT_BUTTON://按左边button时的事件break;......
0 0
- android---制作一个自定义button
- Android自定义Button [附一个例子吧]
- android自定义一个带进度条的button
- 【Android】如何设置一个自定义的Button
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- android 制作自定义背景Button按钮、自定义形状Button的全攻略
- Android自定义Button组件
- android自定义button样式
- android之自定义button
- android 自定义button shape
- android 自定义BUtton
- Android自定义Button按钮
- android自定义button样式
- android自定义button样式
- android 自定义button样式
- Android:自定义Button
- android 开发工具
- 大数除法
- 陈怡暖:黄金无视美元再次跳水,巨量卖单砸开1180支撑
- 示例程序047--用opencv的stitcher类实现图像拼接
- JAVA字符串转日期或日期转字符串
- android---制作一个自定义button
- Java向前引用容易出错的地方
- 关于Xcode6创建项目系统不会自带Prefix.pch文件
- 11g oracle 用户密码过期问题
- 04-树5. File Transfer (25)
- 五大内存分区
- 5.机器学习的可行性与数据量关系,突破点
- -bash-3.00$的解决方法
- ceph技巧1