Android 基本控件及表单三大控件,事件处理

一、Android事件处理的概述:
(一)、概念:
在Android中,我们可以通过事件处理使UI与用户互动(UI Events)。具体形式则是以事件监听器(event listener)的方式來“监听”用户的动作。
Android提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android注册一个事件监听器。每个事件监听器都包含一个回调方法(callback method),这个回调方法(callback method)主要的工作就是回应或处理用户的操作。
(二)、Android UI事件处理的两套机制:
1、基于监听和回调的事件处理机制(event listener):
就是为Android中的控件绑定特定的事件监听器。一旦该控件监听到有相应的动作发生,则该动作会触发事件监听器,而该监听器会调用内部的回调方法做出相应的响应。事件监听器的核心就是它内部包含的回调方法。

2、另外一种UI事件的机制为事件处理器(event handler):event handler与event listener是不一样的处理机制。后续课程中会讲到多线程的Handler、Looper消息传递机制。

(三)、Android种常用的事件监听器及其回调方法(callback method):
View.OnClickListener : onClick() 单击事件
View.OnLongClickListener : onLongClick() 长按事件
View.OnFocusChangeListener : onFocusChange() 焦点改变事件
View.OnKeyListener : onKey() 按键监听事件
View.OnTouchListener : onTouch() 触摸屏事件
View.OnCreateContextMenuListener : onCreateContextMenu() 创建上下文菜单事件
【备注:】请同学们在这里增添新学到的事件监听类:
RadioGroup.OnCheckedChangeListener 单选按钮组的勾选项改变监听器
CompoundButton.OnCheckedChangeListener 多选框勾选项改变监听器
AdapterView.OnItemSelectedListener 下拉列表框条目被选中监听器
AdapterView.OnItemClickListener ListView的条目单击监听器
AdapterView.OnItemClickListener GridView的条目单击监听器
DatePicker.OnDateChangedListener DatePicker的日期改变监听器
TimePicker.OnTimeChangedListener
AbsListView.OnScrollListener ListView的滑动监听器
ViewPager.OnPageChangeListenerTabHost.OnTabChangeListener
SearchView.OnQueryTextListener
SeekBar.OnSeekBarChangeListener
RatingBar.OnRatingBarChangeListener
ActionBar.OnNavigationListener
ActionBar.TabListener

【备注:】其实事件监听器,就是实现了一个特定接口的Java类的实例。
实现事件监听器有几种形式:
1、内部类形式;
2、外部类形式;
3、Activity实现监听器接口,自身作为事件监听器类;
4、匿名内部类的形式创建事件监听器,并实现监听器内的方法。(Android开发中常用匿名内部类作为监听器)

(二)、基本控件:—— TextView:
1、andorid:text
2、 android:textColor
3、 android:textSize
4、andorid:height
5、 android:width
6、 android:inputType
7、 android:singleLine
8、android:gravity
9、android:drawableLeft
10、android:drawableRight
11、android:drawableTop
12、android:drawableBottom
13、android:autoLink (web / email / phone / map / all / none)
14、android:hint

二、基本控件:—— EditText
(一)、 EditText 类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText

备注:EditView类继承自TextView类,EditView与TextView最大的不同就是用户可以对EditView控件进行编辑,同时还可以为EditView控件设置监听器,用来判断用户的输入是否合法。

(二)、EditView常用属性:

(三)、android:inputType的可选项:
android:inputType=”textPersonName”
android:inputType=”textPassword”
android:inputType=”numberPassword”
android:inputType=”textEmailAddress”
android:inputType=”phone”
android:inputType=”textPostalAddress”
android:inputType=”time”
android:inputType=”date”
android:inputType=”number”

(四)、EditText常用方法:

1、setText ()
2、getText ()

三、基本控件:—— ImageView:
(一)、类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.ImageView

(二)、 ImageView 常用属性:
1、andorid:src 设置图片来源。属性值为android:src=”@drawable/图片名称”
2、android:adjustViewBounds 用于设置 ImageView 是否调整自己的边界,来保持所显示图片的长宽比例。属性值为true或false
3、 android:maxHeight 设置 ImageView 的最大高度。需要先设置android:adjustViewBounds为true,否则不起作用。
4、andorid:maxWidth 设置 ImageView 的最大宽度。需要先设置android:adjustViewBounds为true,否则不起作用。
5、 android:scaleType 设置所显示的图片如何缩放或移动,以适应ImageView的大小。可选项:fitCenter、fitStart 、 fitEnd、 fitXY 、 center、centerCrop、centerInside、matrix

matrix :保持原图大小、从左上角的点开始,以矩阵形式绘图。 MATRIX 用图片的矩阵从左向开始来画,不做任何拉伸。如果一个100*100的ImageView,它的src是10*10的小图,则图显示在左上角,如果scr是200*200的大图,则截取它左上的100*100做显示。
fitXY :把图片按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满View. FIT_XY 不保持图片横宽比,把图片的宽和高分别拉伸或缩放至ImageView的大小。如果是一个100*100的ImageView,它的src是20*10,则直接把它拉伸为100*100后显示,如果src是200*100,则把它缩放为100*100后显示,此种方法容易导致图片变形。

fitStart :把图片按比例扩大(缩小)到View的宽度,显示在View的上部分位置 。FIT_START 与 FIT_CENTER 缩放拉伸原则一样,区别是处理过的图片居左显示。
fitCenter :把图片按比例扩大(缩小)到View的宽度,居中显示 。FIT_CENTER 保持横宽比,对图片进行拉伸或缩放,原则是:
1)图片能完整显示;
2)图片宽或高至少有一样与ImageView的相同;
3)处理过的图片居中显示。
如果是一个100*100的ImageView,它的src是20*10,先把图片等比放大到100*50,然后再居中显示。它的src是100*200,会先把图片等比缩放到50*100,然后再居中显示。
fitEnd :把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置 。FIT_END 与 FIT_CENTER缩放拉伸原则一样,区别是处理过的图片居右显示。

Center : 以原图的几何中心点和ImagView的几何中心点为基准,按图片的原来size居中显示,不缩放, 当图片长/宽超过View的长/宽,则截取图片的居中部分显示ImageView的size. 当图片小于View 的长宽时,只显示图片的size,不剪裁。 CENTER 不做任何拉伸,以居中的方式显示图片。如果是一个100*100的ImageView,它的src是10*10的小图,则图显示在的中央,如果src是200*200的大图,截取中间的100*100用来显示。
centerCrop :以原图的几何中心点和ImagView的几何中心点为基准,按比例扩大(图片小于View的宽时)图片的size。 居中显示,使得图片长 (宽)等于或大于View的长(宽),并按View的大小截取图片。 当原图的size大于ImageView时,按比例缩小图片,使得长宽中有一向等于ImageView,另一向大于ImageView。 CENTER_CROP 保持图片横宽比,以图片中心为基点进行拉伸显示,拉伸的原则是填充满整个ImageView。如果是一个100*100的ImageView,它的src是20*10,则它会被等比拉伸成200*100,然后再截取其中央的100*100显示。如果src是200*300的,直接截取中央的100*100显示,不做任何拉伸或缩放。
centerInside :以原图的几何中心点和ImagView的几何中心点为基准,将图片的内容完整居中显示, 通过按比例缩小原来的size使得图片长(宽)等于或小于ImageView的长(宽)。CENTER_INSIDE 保持图片横宽比,以图片中心为基点进行缩放显示,缩放的原则是显示完整个图片。如果是一个100*100的ImageView,它的src是20*10,它直接居中显示。如果src是200*100的,先把图片等比缩小到100*50,然后再居中显示。

    一般情况下,设置为centerCrop能获得较好的适配效果。

(三)、ImageView常用方法:
1、setImageBitmap()
2、setImageDrawable()
3、setImageResource()

(四)、实现图片变换的核心代码:
publicclass MainActivity extends Activity {
private ImageView imageView_main_show;
// 定义一个数组,用来存放所有图片的id
privateint[] imgIds = { R.drawable.img001, R.drawable.img012,
R.drawable.img017, R.drawable.img021, R.drawable.img030,
R.drawable.img031, R.drawable.img033, R.drawable.img038,
R.drawable.img039 };
privateintindex = 0;

@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show);
}

publicvoid clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_previous:
index–;
break;
case R.id.button_main_next:
index++;
break;
}
if (index < 0) {
index = imgIds.length - 1;
}
if (index > imgIds.length - 1) {
index = 0;
}
imageView_main_show.setImageResource(imgIds[index]);
}

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
returntrue;
}

}

四、基本控件:—— RadioButton及RadioGroup
(一)、类结构介绍:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.LinearLayout
↳ android.widget.RadioGroup

java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
↳ android.widget.CompoundButton
↳ android.widget.RadioButton

RadioButton继承于Button,所以具有普通按钮的各种属性,但是与普通按钮不同的是,RadioButton提供了可选中的功能。在使用RadioButton的时候,要使用RadioGroup来包围起这些RadioButton。
【备注:】RadioGroup是LinearLayout的子类,所以RadioGroup本质上是一个存放RadioButton的布局容器。
需要记住的是:默认的LinearLayout布局的Orientation属性是水平的,而默认的RadioGroup的Orientation属性是垂直的。

(二)、重点记忆的类方法:
1、RadioGroup类中的getCheckedRadioButtonId()

(三)、核心代码:
// A.、UI的代码:

你可能感兴趣的:(Android 基本控件及表单三大控件,事件处理)