Android 自定义控件之界面标题导航及控件打包共享
来源:互联网 发布:大数据应用网站 编辑:程序博客网 时间:2024/05/23 11:49
控件主要如图所示
本文目录主要如下:
1.自定义控件属性的定义
2.自定义控件的java代码
3.自定义控件属性的用法
4.控件项目的打包处理
5.其他项目的使用
1.自定义控件属性的定义
自定义控件属性主要定义在values文件夹下的attrs.xml文件里。
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><resources> <attr name="drawable_right" /> <attr name="drawable_left" /> <attr name="text_left" /> <attr name="text_middle" /> <attr name="text_right" /> <attr name="textSize_left" /> <attr name="textSize_middle" /> <attr name="textSize_right" /> <attr name="bg" /> <declare-styleable name="CustomHeadView"> <attr name="drawable_right" /> <attr name="drawable_left" /> <attr name="text_left" /> <attr name="text_middle" /> <attr name="text_right" /> <attr name="textSize_left" /> <attr name="textSize_middle" /> <attr name="textSize_right" /> <attr name="bg" /> </declare-styleable></resources></span>
2.自定义控件的java代码
获取属性值主要通过 TypedArray 类来获取属性值
如下:
<span style="font-size:14px;"> TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CustomHeadView);id_bg=typedArray.getInt(R.styleable.CustomHeadView_bg, -1);str_TextOfLeft = typedArray.getString(R.styleable.CustomHeadView_text_left);str_TextOfMiddle = typedArray.getString(R.styleable.CustomHeadView_text_middle);str_TextOfRight = typedArray.getString(R.styleable.CustomHeadView_text_right);id_drawOfRight = typedArray.getInt(R.styleable.CustomHeadView_drawable_right,-1);id_drawOfLeft = typedArray.getInt(R.styleable.CustomHeadView_drawable_left,-1);f_textSizeOfLeft = typedArray.getFloat(R.styleable.CustomHeadView_textSize_left, 22);f_textSizeOfMiddle = typedArray.getFloat(R.styleable.CustomHeadView_textSize_middle, 22);f_textSizeOfRight = typedArray.getFloat(R.styleable.CustomHeadView_textSize_right, 22);</span>
控件的主要代码如下:
<span style="font-size:14px;">/** *by lvshujun 2014/9/2 */package com.example.customview;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.Gravity;import android.view.View;import android.widget.RelativeLayout;import android.widget.TextView;public class CustomHeadView extends RelativeLayout{private int id_bg;private int id_drawOfRight;private int id_drawOfLeft;private String str_TextOfLeft;private String str_TextOfMiddle;private String str_TextOfRight;private float f_textSizeOfLeft;private float f_textSizeOfMiddle;private float f_textSizeOfRight;public TextView tv_middle;public TextView tv_left;public TextView tv_right;public CustomHeadView(Context context, AttributeSet attrs){super(context, attrs);initData(context,attrs);initView(context);}private void initData(Context context,AttributeSet attrs) {// TODO Auto-generated method stubTypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CustomHeadView);id_bg=typedArray.getInt(R.styleable.CustomHeadView_bg, -1);str_TextOfLeft = typedArray.getString(R.styleable.CustomHeadView_text_left);str_TextOfMiddle = typedArray.getString(R.styleable.CustomHeadView_text_middle);str_TextOfRight = typedArray.getString(R.styleable.CustomHeadView_text_right);id_drawOfRight = typedArray.getInt(R.styleable.CustomHeadView_drawable_right,-1);id_drawOfLeft = typedArray.getInt(R.styleable.CustomHeadView_drawable_left,-1);f_textSizeOfLeft = typedArray.getFloat(R.styleable.CustomHeadView_textSize_left, 22);f_textSizeOfMiddle = typedArray.getFloat(R.styleable.CustomHeadView_textSize_middle, 22);f_textSizeOfRight = typedArray.getFloat(R.styleable.CustomHeadView_textSize_right, 22);}private void initView(Context context) {// TODO Auto-generated method stubif(id_bg!=-1) setBackgroundResource(id_bg);tv_middle = new TextView(context);LayoutParams params2 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);params2.addRule(RelativeLayout.CENTER_IN_PARENT);tv_middle.setLayoutParams(params2);tv_middle.setText(str_TextOfMiddle);tv_middle.setTextSize(f_textSizeOfMiddle);tv_middle.setGravity(Gravity.CENTER);addView(tv_middle);tv_left= new TextView(context);LayoutParams params1 = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);params1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);params1.addRule(RelativeLayout.CENTER_VERTICAL);tv_left.setLayoutParams(params1);tv_left.setText(str_TextOfLeft);if(id_drawOfLeft!=-1)tv_left.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(id_drawOfLeft), null, null, null);tv_left.setTextSize(f_textSizeOfLeft);addView(tv_left);tv_right = new TextView(context);LayoutParams params3 = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);params3.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);params3.addRule(RelativeLayout.CENTER_VERTICAL);tv_right.setLayoutParams(params3);tv_right.setText(str_TextOfRight);tv_right.setTextSize(f_textSizeOfRight);tv_right.setGravity(Gravity.CENTER_VERTICAL);if(id_drawOfRight!=-1)tv_right.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(id_drawOfRight), null);addView(tv_right);}@Overrideprotected void onDraw(Canvas canvas){super.onDraw(canvas);}public void setViewtOnClickListener(View view,OnClickListener listener){view.setOnClickListener(listener);}}</span>
3.自定义控件属性的用法
在布局文件里首先要定义引用资源的地址
xmlns:example="http://schemas.android.com/apk/res/com.example.lv" com.example.lv这个是你所在项目的包名
<span style="font-size:14px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:example="http://schemas.android.com/apk/res/com.example.lv" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.customview.CustomHeadView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/custom" example:text_left="首页" example:text_middle="主题" example:drawable_right="0x7f020000" example:bg="0x7f020003" example:drawable_left="0x7f020001" /> </LinearLayout></span>
4.控件项目的打包处理
控件项目里面包含的Activity ,menu等等不用的文件可以删除。然后右击项目属性,如下:
在新建的项目里可以包含这个项目:如下图
最后一定要注意,在所在项目中使用控件,引用资源的地址一样要填本项目的包
xmlns:example="http://schemas.android.com/apk/res/com.example.lv"
另附,项目下载地址:http://download.csdn.net/detail/q22232222/7860833
0 0
- Android 自定义控件之界面标题导航及控件打包共享
- Android自定义控件之标题控件
- 自定义控件之android列表分组及字母导航
- Android-自定义控件之组装控件(自定义导航)
- android 自定义导航控件
- Android自定义组合标题控件
- 自定义简单控件之标题控件
- android 自定义导航控件源码
- android 如何打包自定义控件
- android 如何打包自定义控件
- Android导航控件之Toolbar
- Android之自定义控件
- Android之自定义控件
- android之自定义控件
- Android自定义控件之自定义日历控件
- Android自定义控件之自定义组合控件
- Android 自定义控件之自定义组合控件
- Android自定义控件之自定义组合控件
- python的问题
- 【9月计划】
- 看到了很不错的css3 animation的教程
- STK 《Connect命令参考手册》首发
- Phonegap2.9.0本地打包html成ios应用
- Android 自定义控件之界面标题导航及控件打包共享
- PhoneGap2.9.0本地将html打包成Android应用
- ios UIWebView截获html并修改便签内容
- 关于hibernate调用存储过程
- HDU1588-Gauss Fibonacci(矩阵快速幂+等比数列二分求和)
- 浏览器的工作原理(一)
- 删除当前用户所有表
- Codeforces 67A. Partial Teacher
- PhoneGap2.9.0本地将html打包成Android应用