android 自定义控件
来源:互联网 发布:accp和java 编辑:程序博客网 时间:2024/06/13 23:08
是这样的,今天打算做一个自定义控件,导航栏。去年这个时候做过,然后忘记了,后面怎么百度都找不到我参考的那篇自定义的博文了,所以我就根据自己的印象写了一个,如果有些雷同,说明我是参考您的博文重新整理了一遍哦~~这篇文章不只是针对导航栏 ,我只是用导航栏举个例子,其他需要的自定义控件也是大同小异的,如果有问题,还请多多指教。
现在开始 自定义控件--->首先:在value文件中新建一个atts.xml,如果有就直接添加下面的代码:
<declare-styleable name="TopBar"> <!-- 中间标题文字--> <attr name="title" format="string"/> <!-- 中间文字大小--> <attr name="titleTextSize" format="dimension"/> <!-- 中间文字颜色--> <attr name="titleTextColor" format="color"/> <!-- 左边图片--> <attr name="leftImage" format="reference"/> <!-- 左边背景--> <attr name="leftBackground" format="reference|color"/> <!-- 右边按钮文本颜色--> <attr name="rightTextColor" format="color"/> <!-- 右边按钮文本大小--> <attr name="rightTextSize" format="dimension"/> <!-- 右边按钮的背景--> <attr name="rightBackground" format="reference|color"/> <!-- 右边按钮的文字--> <attr name="rightText" format="string"/> </declare-styleable>
<declare-styleable name="TopBar"> <!-- 中间标题文字--> <attr name="title" format="string"/> <!-- 中间文字大小--> <attr name="titleTextSize" format="dimension"/> <!-- 中间文字颜色--> <attr name="titleTextColor" format="color"/> <!-- 左边图片--> <attr name="leftImage" format="reference"/> <!-- 左边背景--> <attr name="leftBackground" format="reference|color"/> <!-- 右边按钮文本颜色--> <attr name="rightTextColor" format="color"/> <!-- 右边按钮文本大小--> <attr name="rightTextSize" format="dimension"/> <!-- 右边按钮的背景--> <attr name="rightBackground" format="reference|color"/> <!-- 右边按钮的文字--> <attr name="rightText" format="string"/> </declare-styleable>
无论自定义啥,都需要先把要修改的属性写到atts.xml就像android:layout_width="25dp"android:layout_height="25dp" 的属性是一样的。
然后--->
public class MyTopBar extends RelativeLayout { private ImageButton leftButton;//左边返回箭头 private TextView tvTitle;//中间标题 private TextView rightButton;//右边其它选择 private topbarClickListener listener; /** * 设置左右两边的监听事件接口 */ public interface topbarClickListener{ public void leftClick(); public void rightClick(); } public void setOnTopbarClickListener(topbarClickListener listener){ this.listener=listener; } //三个控件的布局设置 private LayoutParams leftParams,rightParams,titleParams; // 标题 private int textColor;//字体颜色 private float titleTextSize;//字体大小 private String title; //标题 // 左边 private Drawable leftBackground;//左边背景图 private Drawable leftImage;//左边图 // 右边 private int rightTextColor;//右字体颜色 private String rightText;//右边文字 private float rightTextSize;//右边文字大小 private Drawable rightBackground;//右边背景 // 将attr对应 构造函数 public MyTopBar(final Context context, AttributeSet attrs) { super(context, attrs); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar); //将 左、中、右 在atts.xml的属性一一对应 textColor=ta.getInt(R.styleable.TopBar_titleTextColor,0);//字体颜色 titleTextSize = ta.getDimensionPixelSize(R.styleable.TopBar_titleTextSize,0);//字体大小 title = ta.getString(R.styleable.TopBar_title); leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);//左边图 leftImage = ta.getDrawable(R.styleable.TopBar_leftImage); rightTextColor = ta.getInt(R.styleable.TopBar_rightTextColor,0);//右字体颜色 rightText = ta.getString(R.styleable.TopBar_rightText); rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground); rightTextSize = ta.getDimensionPixelSize(R.styleable.TopBar_rightTextSize,0); ta.recycle(); //实例化左中右控件 leftButton = new ImageButton(context); tvTitle = new TextView(context); rightButton = new TextView(context); //将左、中、右控件与数学一一对应起来 leftButton.setBackgroundDrawable(leftBackground); leftButton.setImageDrawable(leftImage); tvTitle.setText(title); tvTitle.setTextColor(textColor); tvTitle.setTextSize(titleTextSize); tvTitle.setGravity(Gravity.CENTER); rightButton.setText(rightText); rightButton.setTextColor(rightTextColor); rightButton.setTextSize(rightTextSize); rightButton.setBackgroundColor(Color.parseColor("#66ccff")); rightButton.setVisibility(View.GONE);//默认右边的文字隐藏 rightButton.setGravity(CENTER_HORIZONTAL); setBackgroundColor(Color.parseColor("#66ccff"));// setBackgroundColor(Color.parseColor("#ff0000")); leftParams = new LayoutParams(120,140);//宽、高; leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);// leftParams.setMargins(50,10,0,10); addView(leftButton,leftParams); rightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); rightParams.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE); rightParams.setMargins(0,0,10,0); addView(rightButton,rightParams); titleParams = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); addView(tvTitle,titleParams); leftButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.leftClick();// getActivity(getActivity).finish(); } }); rightButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.rightClick(); } }); } public void setRightIsVisible(boolean flag){ if(flag){ rightButton.setVisibility(View.VISIBLE); }else{ rightButton.setVisibility(View.GONE); } }}
这样自定义导航栏就做好了,
在xml上使用即可
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res-auto" //这句一定要加 android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/main_bg"> <!--ml 为自定义内容--> <com.example.ma.mali03.MyView.MyTopBar android:id="@+id/mashang_topbar" android:layout_width="match_parent" android:layout_height="@dimen/x50" custom:title="马上预约" custom:titleTextSize = "19sp" custom:textColor="#fff" custom:leftImage="@drawable/all_back" > </com.example.ma.mali03.MyView.MyTopBar></LinearLayout>最后在.javas上和普通控件一样使用就可以了。
myTopBar = (MyTopBar)findViewById(R.id.mashang_topbar);
myTopBar.setOnTopbarClickListener(new MyTopBar.topbarClickListener() { @Override public void leftClick() { finish(); } @Override public void rightClick() { }});等我想起git的密码后我会把完整的源代码放到github上
阅读全文
0 0
- [Android自定义控件] Android自定义控件
- Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- Android 自定义控件 单页翻书控件
- android虚线控件---自定义控件
- android自定义控件实例 --控件
- Android自定义控件--组合控件
- android 控件 自定义组合控件
- 【android自定义控件】ProgressBar自定义
- Android自定义控件 自定义属性
- Android自定义控件 -- 自定义View
- Android自定义控件 -- 自定义ViewGroup
- Android 自定义控件 自定义标题栏
- Android 自定义控件-自定义进度条。
- android 之 Fragment 中使用 DialogFragment 创建回调
- 关于js函数重构的问题
- JavaScript对象、包装类
- 第十一题 九度p38 ,贪心算法 cb的编译器出问题了,以后还是用dev吧
- bzoj 3252 攻略(长链剖分 + 贪心)
- android 自定义控件
- 笔记
- 剪花布条-简单字符串匹配
- listview
- 代理模式与Java动态代理
- xpath学习笔记
- 贪心算法-4.5单源最短路径之Dijkstra算法(松弛操作)
- linux常用命令command not found的解决方案(自己整理)
- Android 跳转到新浪微博