Android 第十天
到今天为止,Andorid上的基本控件已经全部学完啦,加油。
Andorid 事件
三个概念涉及到Android事件管理:
事件监听器: 主要涉及建立一个Android的GUI视图类,View类提供了一些事件监听器。事件监听器是对象接收通知在事件发生时。
事件监听器注册: 事件注册事件处理程序被注册了事件侦听器的过程,使该处理调用的事件侦听器触发事件。
事件处理程序: 当一个事件发生时,已注册的事件和事件监听器,事件监听器调用事件处理程序,这是实际处理事件的方法。
Android 样式
样式可以定义在一个单独的XML指定布局的XML资源文件。此XML文件位于 res/values/ 项目目录,强制性的样式文件中作为根节点,XML文件名称是任意,但它必须使用.xml扩展名。
可以定义每个文件中使用的多种样式,样式定义及使用
4.png样式继承
Android支持级联样式表在网页设计风格非常类似继承这种方式。可以使用这个继承现有的样式属性,然后定义想要更改或添加属性。
其操作简单,创建一个新的的样式继承LargeFont上述CustomFontStyle风格定义,但字体的大小变大,可以编写这样的新的样式:
1.png@style/CustomFontStyle.LargeFont 的XML布局文件,可以参考这个新的样式。可以继续秉承这样多次,只要愿意,周期通过链接名称。例如,可以扩展FontStyle.LargeFont的是红色的,如下:
2.png继承这种技术通过链接在一起的名字仅适用于自己的资源定义的样式。
要引用一个Android内置风格,如TextAppearance,必须使用父属性,如下所示:
3.pngAndroid 主题
希望能够理解样式的概念,现在让我们去了解什么是主题。主题是什么,主题只不过是要Android应用到整个活动或应用程序中统一样式,而不是一个单独的视图样式。
因此,当一个样式应用为主题,将适用于每一个活动或应用程序视图它支持每个样式属性。例如,可以应用一个主题Activity 活动的的同一CustomFontStyle风格,然后内部的所有文本,活动都会有绿色环保等宽字体。
要设置应用程序的所有活动的主题,打开AndroidManifest.xml文件,编辑标签包含了android:theme 属性的风格名称。例如:
<applicationandroid:theme="@style/CustomFontStyle">
有一些由Android定义的默认主题,可以直接使用或继承父属性如下:
<stylename="CustomTheme"parent="android:Theme.Light">
</style>
样式对单个控件作用,主题对整个应用起作用.
自定义组件
如果要求执行自定义绘图/定制部件的尺寸,那么需要重写 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 和 onDraw(Canvas canvas) 方法。如果不打算调整或变更内置组件的形状,那么并不需要使用这些方法在自定义组件。
布局管理报告部件的宽度和高度需要协调 onMeasure() 方法,需要调用setMeasuredDimension(int width, int height),这种方法来报告尺寸大小。
可以执行自定义绘图里Canvas 的onDraw(Canvas canvas) 方法,其中android.graphis.Canvas其对应 Swing 是非常相似的,drawRect(), drawLine(), drawString(), drawBitmap() 等,可以用它来绘制组件。
自定义组件使用:
注意继承关系
java中调用:
DateViewdateView =newDateView(this);
setContentView(dateView);
Xml中调用: //com.yiibai.dateviewdemo是包名
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#fff"
android:textSize="40sp"
android:background="#000"
/>
可以使用布局XML文件中定义的属性如下:
http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.yiibai.dateviewdemo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#fff"
android:textSize="40sp"
custom:delimiter="-"
custom:fancyText="true"
/>
重要的部分是xmlns:custom="http://schemas.android.com/apk/res/com.yiibai.dateviewdemo"。需要注意的是http://schemas.android.com/apk/res/将保持原样,但最后一部分需要设置包名,也可以使用任何xmlns:在这个例子中,使用的是custom,但可以使用任何喜欢的名字。