- 浏览: 5821049 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
上一节讲了一种实现自定义控件的方法,这种方法不够好,属性不能在xml文件中设置,只能在代码中设置。这次就讲如何在xml中直接设置属性。
首先定义一个属性文件attrs.xml:
然后可以在UpDownView中这样引用:
这里我仍旧保留了很多setter/getter方法,是为了便于以后动态改变。
使用到的布局up_down_view.xml如下:
使用,只需要在布局文件提供初始化属性就可以了,无需在代码中setXXX了:
注意这句话xmlns:app="http://schemas.android.com/apk/res/com.ql.app"别忘了加上。
最后奉上attrs.xml中所有可能的format值:
注1:format可选项
"reference" //引用
"color" //颜色
"boolean" //布尔值
"dimension" //尺寸值
"float" //浮点值
"integer" //整型值
"string" //字符串
"fraction" //百分数,比如200%
枚举值,格式如下:
< attr name="orientation">
< enum name="horizontal" value="0" />
< enum name="vertical" value="1" />
< /attr>
xml中使用时:
android:orientation = "vertical"
标志位,位或运算,格式如下:
< attr name="windowSoftInputMode">
< flag name = "stateUnspecified" value = "0" />
< flag name = "stateUnchanged" value = "1" />
< flag name = "stateHidden" value = "2" />
< flag name = "stateAlwaysHidden" value = "3" />
< flag name = "stateVisible" value = "4" />
< flag name = "stateAlwaysVisible" value = "5" />
< flag name = "adjustUnspecified" value = "0x00" />
< flag name = "adjustResize" value = "0x10" />
< flag name = "adjustPan" value = "0x20" />
< flag name = "adjustNothing" value = "0x30" />
< /attr>
xml中使用时:
android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
另外属性定义时可以指定多种类型值,比如:
< attr name = "background" format = "reference|color" />
xml中使用时:
android:background = "@drawable/图片ID|#00FF00"
over!
首先定义一个属性文件attrs.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="updownview"> <attr name="min" format="float" /> <attr name="max" format="float" /> <attr name="step" format="float" /> <attr name="number" format="float" /> </declare-styleable> </resources>
然后可以在UpDownView中这样引用:
package com.ql.view; import java.text.DecimalFormat; import com.ql.app.R; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; public class UpDownView extends LinearLayout { private final static String tag="UpDownView"; private ImageView iv_minus,iv_plus; private EditText et_input; public UpDownView(Context context) { super(context); // TODO Auto-generated constructor stub Log.i(tag, "UpDownView1"); } public UpDownView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub Log.i(tag, "UpDownView2"); TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.updownview); min=a.getFloat(R.styleable.updownview_min, -10000); max=a.getFloat(R.styleable.updownview_max, 10000); step=a.getFloat(R.styleable.updownview_step, 1000); number=a.getFloat(R.styleable.updownview_number, 0); a.recycle(); } @Override protected void onFinishInflate() { // TODO Auto-generated method stub super.onFinishInflate(); Log.i(tag, "onFinishInflate"); View view=LayoutInflater.from(getContext()).inflate(R.layout.up_down_view, this); iv_minus=(ImageView)view.findViewById(R.id.iv_minus); iv_plus=(ImageView)view.findViewById(R.id.iv_plus); et_input=(EditText)view.findViewById(R.id.et_input); if(number!=0){ et_input.setText(convertNumberToString(number,pattern)); } iv_minus.setOnClickListener(listener); iv_plus.setOnClickListener(listener); } OnClickListener listener=new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.iv_minus: doMinus(); break; case R.id.iv_plus: doPlus(); break; default: break; } } }; private double number;//当前量 private double step=1000;//步长,每次加减的量 private double max=10000;//最大量 private double min=-10000;//最小量 private void doPlus(){ String temp=et_input.getText().toString(); if(temp.length()==0){ number=0; }else{ number=Double.parseDouble(temp); } number+=step; if(number>max){ number=max; } et_input.setText(convertNumberToString(number,pattern)); } private void doMinus(){ String temp=et_input.getText().toString(); if(temp.length()==0){ number=0; }else{ number=Double.parseDouble(temp); } number-=step; if(number<min){ number=min; } et_input.setText(convertNumberToString(number,pattern)); } private String pattern = "############.##"; /** * Util * @param value * @param pattern * @return */ public static String convertNumberToString(Number value, String pattern) { try { DecimalFormat decimalFormat = new DecimalFormat(pattern); return decimalFormat.format(value); } catch (Exception e) { e.printStackTrace(); } return null; } public double getNumber() { return number; } public void setNumber(double number) { et_input.setText(convertNumberToString(number,pattern)); this.number = number; } public double getStep() { return step; } public void setStep(double step) { this.step = step; } public double getMax() { return max; } public void setMax(double max) { this.max = max; } public double getMin() { return min; } public void setMin(double min) { this.min = min; } }
这里我仍旧保留了很多setter/getter方法,是为了便于以后动态改变。
使用到的布局up_down_view.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="horizontal" > <ImageView android:id="@+id/iv_minus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@drawable/sh_trade_minus" android:scaleType="fitCenter" /> <EditText android:id="@+id/et_input" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:singleLine="true" android:inputType="numberDecimal" /> <ImageView android:id="@+id/iv_plus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@drawable/sh_trade_plus" android:scaleType="fitCenter" /> </LinearLayout>
使用,只需要在布局文件提供初始化属性就可以了,无需在代码中setXXX了:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.ql.app" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.ql.view.UpDownView android:id="@+id/upDownView" android:layout_width="fill_parent" android:layout_height="wrap_content" app:min="0" app:max="100" app:step="1" app:number="90.01" /> </LinearLayout>
注意这句话xmlns:app="http://schemas.android.com/apk/res/com.ql.app"别忘了加上。
最后奉上attrs.xml中所有可能的format值:
注1:format可选项
"reference" //引用
"color" //颜色
"boolean" //布尔值
"dimension" //尺寸值
"float" //浮点值
"integer" //整型值
"string" //字符串
"fraction" //百分数,比如200%
枚举值,格式如下:
< attr name="orientation">
< enum name="horizontal" value="0" />
< enum name="vertical" value="1" />
< /attr>
xml中使用时:
android:orientation = "vertical"
标志位,位或运算,格式如下:
< attr name="windowSoftInputMode">
< flag name = "stateUnspecified" value = "0" />
< flag name = "stateUnchanged" value = "1" />
< flag name = "stateHidden" value = "2" />
< flag name = "stateAlwaysHidden" value = "3" />
< flag name = "stateVisible" value = "4" />
< flag name = "stateAlwaysVisible" value = "5" />
< flag name = "adjustUnspecified" value = "0x00" />
< flag name = "adjustResize" value = "0x10" />
< flag name = "adjustPan" value = "0x20" />
< flag name = "adjustNothing" value = "0x30" />
< /attr>
xml中使用时:
android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
另外属性定义时可以指定多种类型值,比如:
< attr name = "background" format = "reference|color" />
xml中使用时:
android:background = "@drawable/图片ID|#00FF00"
over!
发表评论
-
NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
2018-10-31 20:45 6995网上有一个StickyScrollView,称之为粘性Scro ... -
自定义Behavior实现AppBarLayout越界弹性效果
2017-03-31 09:33 10369一、继承AppBarLayout.Beha ... -
Android - 一种相似图片搜索算法的实现
2017-03-31 09:33 2625算法 缩小尺寸。 将图片缩小到8x8的尺寸,总共64个 ... -
使用SpringAnimation实现带下拉弹簧动画的 ScrollView
2017-03-30 11:30 2851在刚推出的 Support Library 25.3.0 里面 ... -
Android为应用添加角标(Badge)
2017-03-30 11:21 61781.需求简介 角标是什么意思呢? 看下图即可明了: 可 ... -
Android端与笔记本利用局域网进行FTP通信
2017-03-23 10:17 980先看图 打开前: 打开后: Activity类 ... -
PorterDuffColorFilter 在项目中的基本使用
2017-03-03 10:58 1356有时候标题栏会浮在内容之上,而内容会有颜色的变化,这时候就要求 ... -
ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
2017-02-24 09:41 2223用法在注释中: import android.anima ... -
迷你轻量级全方向完美滑动处理侧滑控件SlideLayout
2017-01-16 16:53 2597纯手工超级迷你轻量级全方向完美滑动处理侧滑控件(比官方 sup ... -
Effect
2017-01-05 09:57 0https://github.com/JetradarMobi ... -
动态主题库Colorful,容易地改变App的配色方案
2016-12-27 14:49 2567Colorful是一个动态主题库,允许您很容易地改变App的配 ... -
对视图的对角线切割DiagonalView
2016-12-27 14:23 1119提供对视图的对角线切割,具有很好的用户定制 基本用法 ... -
仿淘宝京东拖拽商品详情页上下滚动黏滞效果
2016-12-26 16:53 3494比较常用的效果,有现成的,如此甚好!:) import ... -
让任意view具有滑动效果的SlideUp
2016-12-26 09:26 1707基本的类,只有一个: import android.a ... -
AdvancedWebView
2016-12-21 09:44 16https://github.com/delight-im/A ... -
可设置圆角背景边框的按钮, 通过调节色彩明度自动计算按下(pressed)状态颜色
2016-11-02 22:13 1922可设置圆角背景边框的的按钮, 通过调节色彩明度自动计算按下(p ... -
网络请求库相关
2016-10-09 09:35 62https://github.com/amitshekhari ... -
ASimpleCache一个简单的缓存框架
2015-10-26 22:53 2179ASimpleCache 是一个为android制定的 轻量级 ... -
使用ViewDragHelper实现的DragLayout开门效果
2015-10-23 10:55 3416先看一下图,有个直观的了解,向下拖动handle就“开门了”: ... -
保证图片长宽比的同时拉伸图片ImageView
2015-10-16 15:40 3734按比例放大图片,不拉伸失真 import android. ...
相关推荐
本教程将深入探讨如何创建一个可伸缩的Panel自定义控件,该控件具备自由扩展缩进的功能,并能实现多个Panel间的联动伸缩。 首先,我们需要了解.NET Framework或.NET Core中的UserControl类,它是所有自定义控件的...
自定义控件是软件开发中的一个重要环节,特别是在UI设计和用户体验优化上。 自定义控件的创建通常涉及以下几个关键知识点: 1. **继承与派生**:在C#中,自定义控件通常是通过继承已有的系统控件(如Button、Label...
WinForms提供了一个丰富的控件库,但有时为了满足特定需求,开发者需要创建自定义控件。"C#自定义控件实例大全,.NET自定义控件实例大全,WINFORM自定义控件实例大全"这个主题涵盖了创建、定制和使用自定义控件的全...
本篇将详细讲解如何在VS2015与Qt5.10.0环境下,通过参考Qwt6.1.3的源码,实现在一个DLL文件中包含多个自定义控件,并在Qt Designer中集成和使用。 首先,我们需要理解Qt的插件系统。Qt的控件插件允许我们在运行时...
开发者通过这个案例可以学习到如何有效地利用`ViewPager`,以及如何设计和实现自定义控件,提升自己的Android开发技能。同时,这个项目也为其他开发者提供了参考,帮助他们构建自己的日历或类似功能的UI组件。
用户控件是ASP.NET中的基本自定义UI元素,它是通过将多个标准ASP.NET控件组合在一起,形成一个复合控件来实现的。用户控件可以看作是网页的微型版,具有自己的HTML、服务器控件和脚本。创建用户控件的主要步骤包括:...
Avalonia实现导航条自定义控件;Avalonia实现导航条自定义控件;Avalonia实现导航条自定义控件;Avalonia实现导航条自定义控件;Avalonia实现导航条自定义控件;Avalonia实现导航条自定义控件;Avalonia实现导航条...
在压缩包“自定义控件”中,很可能包含了具体的代码示例、设计图或其他辅助材料,帮助开发者理解如何实现自定义控件。通过研究这些资源,你可以深入学习C#自定义控件的各个方面,包括事件处理、绘图技巧以及设计时...
2. **自定义控件的基础**:首先,我们需要创建一个新的`View`类作为自定义控件的基础。在这个类中,我们需要重写`onDraw()`方法来绘制背景图和其他元素,并处理触摸事件以响应用户的滑动操作。 3. **触摸事件处理**...
如果是一个工程文件,它可能包含了使用自定义控件的整个应用程序。 总的来说,VB6.0的用户控件和自定义控件是软件开发中强大的工具,它们使得开发者能够创造出符合项目需求的独特界面和功能。通过理解和熟练运用...
此时,实现自定义控件成为解决问题的有效途径之一。本文旨在详细介绍如何在QT环境中快速有效地添加自定义控件。 #### 二、准备工作 1. **开发环境**: 首先确保安装了最新版本的QT Creator及相应的编译工具链。这...
在"labview自定义控件.rar"这个压缩包中,我们关注的是LabVIEW中的一个重要特性——自定义控件。 自定义控件是LabVIEW编程中的一个重要元素,它允许用户根据需求创建具有特定功能或视觉效果的独特界面组件。这不仅...
"自定义控件_View小球"这个示例就是一个很好的实践,它教你如何根据特定需求创建一个简单的自定义控件,该控件能够实时响应用户的触摸事件,将小球移动到手指触点的位置,展示了自定义控件结合动画效果的巧妙运用。...
在这个案例中,我们将讨论如何创建一个自定义的TextBox控件,该控件仅允许用户输入数字,通过使用正则表达式来屏蔽非数字字符。 首先,我们从标题"自定义控件C# TextBox"出发。在C#中,自定义控件通常是通过继承已...
2. **设计界面**:在用户控件的设计器中,可以删除默认的控件,然后使用绘图工具绘制一个圆形。这通常通过重写OnPaint方法来完成,使用Graphics类的DrawEllipse方法来绘制圆。 3. **代码实现**:在OnPaint方法中,...
通过设置控件的`objectName`,然后在全局样式表或代码中应用样式,可以实现自定义控件的皮肤。这在创建具有统一风格的应用程序时非常有用。 5. 响应式设计:了解如何使自定义控件适应不同的屏幕尺寸和分辨率,以及...
实现自定义控件通常涉及以下步骤: 1. 继承已存在的View类(如Button、TextView等)或 ViewGroup 类,以便利用其基本功能。 2. 在onDraw()方法中重写绘图逻辑,绘制自定义的视图形状和内容。 3. 实现onMeasure()和...
2. **重写虚函数**:C++的面向对象特性使得我们可以重写基类中的虚函数来实现自定义行为。例如,可以重写`paintEvent()`函数来绘制控件的外观,或者重写`mousePressEvent()`来处理鼠标点击事件。 3. **添加成员变量...
在这个项目“通过自定义控件实现的信号灯”中,我们看到作者使用VC++2005(Visual C++ 2005)这一经典开发环境来构建了一个自定义的信号灯控件。下面将详细讲解这个知识点。 1. **自定义控件**: 自定义控件是程序员...