android 自定义控件
学习参考:http://blog.csdn.net/hudashi/article/details/50913257
http://blog.csdn.net/gebitan505/article/details/18264091
http://blog.csdn.net/psuaije/article/details/8662266
http://www.cnblogs.com/yc-755909659/archive/2015/02/10/4283294.html
下面是源代码:代码中添加了一个接口,这个接口用于给自定义控件设置自定义的事件
mycontrol.Java代码:
- package paj.control;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.LinearLayout;
- //继承LinearLayout
- public class mycontrol extends LinearLayout {
- /**
- * 一定一个接口
- */
- public interface ICoallBack{
- public void onClickButton(String s);
- }
- /**
- * 初始化接口变量
- */
- ICoallBack icallBack = null;
- /**
- * 自定义控件的自定义事件
- * @param iBack 接口类型
- */
- public void setonClick(ICoallBack iBack)
- {
- icallBack = iBack;
- }
- //////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////
- private Context _Context;
- /**
- * 两个参数的构造函数(必须使用两个参数的构造函数,因为自定义的控件需要在XML布局中使用,里面含有属性)
- * @param context 调用自定义控件的对象
- * @param attrs
- */
- public mycontrol(Context context, AttributeSet attrs) {
- super(context, attrs);
- _Context = context;
- //将自定义的控件添加到主布局
- this.addView(CreateLayout());
- }
- private View CreateLayout(){
- //创建一个LainearLayout布局
- LinearLayout layout = new LinearLayout(_Context);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
- layout.setOrientation(LinearLayout.VERTICAL);
- layout.setLayoutParams(params);
- //创建一个文本编辑框
- final EditText edit = new EditText(_Context);
- LayoutParams editParams = new LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
- edit.setLayoutParams(editParams);
- //创建一个按钮
- Button button = new Button(_Context);
- LayoutParams btpParams = new LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT);
- button.setLayoutParams(btpParams);
- button.setText("点击获取");
- //设置按钮的点击事件
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // 返回这个自定义控件中计算出的值,使用回调实现
- icallBack.onClickButton(edit.getText().toString());
- }
- });
- //文本编辑框和按钮添加到layout布局
- layout.addView(edit);
- layout.addView(button);
- return layout;
- }
- }
activity_main.xml代码
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- <!-- 定义自己的控件 -->
- xmlns:paj_control="http://schemas.android.com/apk/res/paj.control.mycontrol"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- >
- <!-- 自定义控件 -->
- <paj.control.mycontrol android:id="@+id/mycontrol"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- <!-- 显示自定义控件返回的值 -->
- <TextView android:id="@+id/test"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
- </LinearLayout>
MainActivity.java 代码:
- package com.example.controlstest;
- import paj.control.mycontrol;
- import paj.control.mycontrol.ICoallBack;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- mycontrol _mMycontrol;
- TextView textView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- textView = (TextView)findViewById(R.id.test);
- //得到自定义控件
- _mMycontrol = (mycontrol)findViewById(R.id.mycontrol);
- //实现自定义控件中的setonClick自定义事件
- _mMycontrol.setonClick(new ICoallBack() {
- @Override
- public void onClickButton(String s) {
- textView.setText(s);//将自定义控件传递的值显示到文本框内
- }
- });
- }
- }
android 自定义控件的更多相关文章
- Android自定义控件之自定义ViewGroup实现标签云
前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...
- Android自定义控件之自定义组合控件
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
- Android自定义控件之自定义属性
前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...
- Android自定义控件之基本原理
前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...
- Android自定义控件1
概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...
- 一起来学习Android自定义控件1
概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...
- [Xamarin.Android] 自定义控件
[Xamarin.Android] 自定义控件 前言 软件项目开发的过程中,免不了遇到一些无法使用内建控件就能满足的客户需求,例如:时速表.折线图...等等.这时开发人员可以透过自定义控件的方式,为项 ...
- android自定义控件实现TextView按下后字体颜色改变
今天跟大家分享一下Android自定义控件入门,先介绍一个简单的效果TextView,按下改变字体颜色,后期慢慢扩展更强大的功能 直接看图片 第一张是按下后截的图,功能很简单, ...
- android 自定义控件(初篇)
android 自定义控件 在写UI当中很多时候会用到自定义的控件,其实自定义控件就像是定义一个类进行调用就OK了.有些相关的感念可以查看API 下面就用个简单的例子来说明自定义控件: public ...
- Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)
最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非 ...
随机推荐
- hadoop 流streaming跑python程序
先放上命令: hadoop jar /usr/hadoop-/contrib/streaming/hadoop-streaming-.jar -mapper mapper.py -file mappe ...
- Java web项目在linux环境下自动编译和部署脚本
自动编译脚本 build.sh, 放置在项目根目录下. #!/bin/bash # check args # init path CURRPATH=`pwd` LIBDIR="$CURRPA ...
- ACM: 限时训练题解-Heavy Coins-枚举子集-暴力枚举
Heavy Coins Bahosain has a lot of coins in his pocket. These coins are really heavy, so he always ...
- 【BZOJ】2729: [HNOI2012]排队
题意 \(n\)个男生\(m\)个女生\(2\)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同.问有多少种排法.(\(n, m \le 2000\)) 分析 组合乱搞. 题解 先放 ...
- 【POJ】2420 A Star not a Tree?
http://poj.org/problem?id=2420 题意:给n个点,求一个点使得到这个n个点的距离和最短,输出这个最短距离(n<=100) #include <cstdio> ...
- Codeforces Round #160 (Div. 2) D. Maxim and Restaurant(DP)
题目链接 想了挺久,枚举每一件物品,当做关键物品,假设再加这一件物品,就>=c了,把剩下的物品背一下包,dp[i][j]表示i个物品可以组成重量j的个数. 这样就可以知道前面放i件,后边肯定放n ...
- iOS 常用英语翻译
1..serve advertisements within the app 服务应用中的广告.如果你的应用中集成了广告的时候,你需要勾选这一项. √2.Attribute this app in ...
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
What it is saying is, it found the DLL, but it couldn't find a type named "namespace.User" ...
- HTML 5 服务器发送事件
接收 Server-Sent 事件通知 EventSource 对象用于接收服务器发送事件通知: 实例 var source=new EventSource("demo_sse.php&qu ...
- SQL server 测试
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...