- TextView控件
Android中专门用来显示文本的控件。
常用属性:
android:layout_width=""---控件宽
android:layout_height=""---控件高
android:layout_weight=""---控件权重
android:text=""---控件上的文本内容
android:textColor=""---文本颜色
android:textSize=""---文本大小
android:layout_marginRight="5dp"---控件右边空出5dp的距离
android:backGround=""---控件的背景色
android:gravity=""---文本相对控件的位置
android:layout_gravity=""---控件相对于其所在容器的位置
android:drawable+四个方向 在文本控件中添加图片
android:drawablepadding 图片与文本的间隔
android:ellipsize="middle"---字过长不想换行,可以使用省略号,此表示省略号在中间的位置
//演示跑马灯的效果
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:autoLink :设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web /email/phone/map/all)
根据内容类型的不同,点击时自动打开相应的应用程序
map(620 Eighth Avenue New York,NY 10018)
我们来了解一下安卓中我们使用的数据单位(扩展)
我们经常会说宽高设置多少,图片显示多大,我们在安卓里可以使用哪些有效单位呢?
px(pixels,像素):对应屏幕上的实际像素点
in(inches,英寸):屏幕物理长度单位
mm(Millimeters,毫米):屏幕物理长度单位
pt(Points 磅):屏幕物理长度单位,1/72英寸
上面这几个基本不用,因为它们都跟屏幕的像素密度是有关系的,因为我们知道安卓的屏幕大小太多了,所以你写一款
应用的话,虽做不到要适用所有的屏幕大小,但主流的那几款你得适用
dp(与密度无关的像素):逻辑长度单位,在160dpi屏幕上,1dp=1px=1/160英寸,随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。
dip:与dp相同,多用于Google示例中
sp:与密度和字体绽放度无关的像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。
所以我们主要用到两种,设置宽高距离时用dp或者dip,设置字体大小时用sp
- Button控件
Button继承自TextView,他主要是在界面生产一个按钮,默认可点击。
当点击按钮时,会触发一个onClick事件。
可以为按钮设计图片。通过设计background属性来为Button添加背景图片
ps:有专为显示图片的Button控件:ImageButton控件。
style="?android:attr/borderlessButtonStyle"设置透明的按钮,这种写法是安卓自带的样式,也可以通过设置背景色来设置透明度
Button按钮点击事件:
- 设置onClick属性。OnClick属性的值,是Activity中的一个方法的名字。例如:onClick属性的值是:fun 则,需要在Activity中定义一个方法,方法的写法如下:public void fun(View view){} 当点击该按钮时,系统会自动调用fun方法。
- 给Button按钮设置监听器。Button.setOnclickListener(监听器对象)。
定义监听器有三种写法:
A:内部类
B:匿名内部类
C:Activity类实现监听器类
- EditText控件
- EditText控件与TextView控件非常相似。EditText相比TextView的最大变化是可以接受用户的输入,可以说它是用户和安卓应用进行数据传输窗户,有了它就等于有了一扇和安卓应用传输的门,通过它用户可以把数据传给安卓应用,然后得到我们想要的数据。
-
android:hint 提示文字
android:textColorHint 提示文字的颜色
android:textCursorDrawable 光标样式。@null时,默认字体颜色
android:editable =false 设置是否可编辑
requestFocus():可以获得焦点的方法
- ImageView控件
-
专门用于显示图片的控件,src属性定义具体的图片。background属性也可以定义图片,当src和background同时定义时,src会覆盖background。
scaleType属性控制图片如何来匹配ImageView 的size:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
-
专门用于显示图片的控件,src属性定义具体的图片。background属性也可以定义图片,当src和background同时定义时,src会覆盖background。
scaleType属性控制图片如何来匹配ImageView 的size:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
-
<!-- center:保持图片原尺寸,居中显示,超出部分不显示 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="center" -->
<!-- centerCrop:按比例扩大图片尺寸,居中显示,超出部分不显示 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="centerCrop"-->
<!-- centerInside:按比例缩小图片,居中显示,完全显示 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="centerInside"-->
<!-- fitCenter:按比例缩放图片,居中显示,完全显示。注意:该属性为默认属性 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="fitCenter"-->
<!-- fitStart:按比例缩放,放在ImageView顶部显示,完全显示图片 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
-
android:src="@drawable/mrzy"
android:scaleType="fitStart"-->
<!-- fitEnd:按比例缩放,放在ImageView底部,完全显示图片 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="fitEnd"-->
<!-- fitXY:不再按照比例缩放,目的是为了填满整个ImageView控件 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:scaleType="fitXY"-->
<!-- matrix:没有缩放,从原始图片的初始位置(左上角)开始展示,超出部分不显示 -->
<!-- ImageView
android:id="@+id/iv01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000"
android:src="@drawable/mrzy"
android:sca
-
-
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pic3"
android:id="@+id/iv1"
android:maxWidth="50dp" 最大宽度
android:maxHeight="50dp"最大高度
android:adjustViewBounds="true"保持宽高比,需要与maxWidth,maxHeight一起使用,否则无效tint属性:使用指定的颜色去填充图片
- CheckedBox控件
-
复选框。
常用属性:button 设置复选框的显示图片
checked 设置该复选框默认是否被选中
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv1"
android:orientation="vertical" >
-
<CheckBox
android:id="@+id/ck1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:button="@drawable/ic_launcher"
android:text="小说" />
<CheckBox
android:id="@+id/ck2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="游戏" />
<CheckBox
android:id="@+id/ck3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="音乐" />
<CheckBox
android:id="@+id/ck4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳舞" />
</LinearLayout>
-
监听器OnCheckedChangedListener的使用。
public class MainActivity extends Activity implements OnCheckedChangeListener {
CheckBox cb1, cb2, cb3, cb4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cb1 = (CheckBox) findViewById(R.id.ck1);
cb2 = (CheckBox) findViewById(R.id.ck2);
cb3 = (CheckBox) findViewById(R.id.ck3);
cb4 = (CheckBox) findViewById(R.id.ck4);
// 判断每一个复选框有没有选中,如果有,就取消
if (cb1.isChecked()) {
cb1.setChecked(false);
}
cb1.setOnCheckedChangeListener(this);
cb2.setOnCheckedChangeListener(this);
监听器OnCheckedChangedListener的使用。
public class MainActivity extends Activity implements OnCheckedChangeListener {
CheckBox cb1, cb2, cb3, cb4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cb1 = (CheckBox) findViewById(R.id.ck1);
cb2 = (CheckBox) findViewById(R.id.ck2);
cb3 = (CheckBox) findViewById(R.id.ck3);
cb4 = (CheckBox) findViewById(R.id.ck4);
// 判断每一个复选框有没有选中,如果有,就取消
if (cb1.isChecked()) {
cb1.setChecked(false);
}
cb1.setOnCheckedChangeListener(this);
cb2.setOnCheckedChangeListener(this);
-
cb3.setOnCheckedChangeListener(this);
cb4.setOnCheckedChangeListener(this);
}
// 选项按钮改变时触发的事件
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.ck1:
if (cb1.isChecked()) {
Toast.makeText(this, "您选中了:" + cb1.getText(),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您取消了:" + cb1.getText(),
Toast.LENGTH_SHORT).show();
}
break;
case R.id.ck2:
if (cb2.isChecked()) {
Toast.makeText(this, "您选中了:" + cb2.getText(),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您取消了:" + cb2.getText(),
Toast.LENGTH_SHORT).show();
}
break;
case R.id.ck3:
if (cb3.isChecked()) {
Toast.makeText(this, "您选中了:" + cb3.getText(),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您取消了:" + cb3.getText(),
Toast.LENGTH_SHORT).show();
}
break;
case R.id.ck4:
if (cb4.isChecked()) {
Toast.makeText(this, "您选中了:" + cb4.getText(),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "您取消了:" + cb4.getText(),
Toast.LENGTH_SHORT).show();
}
-
break;
}
}
}
- RadioButton控件
-
单选按钮。
必须配合RadioGroup使用,一个RaidoGroup内的RadioButton在同时,最多只能有一个被选中。而且RadioButton要加ID属性
常用属性:button 设置单选按钮的显示图片
checked 设置该复选框默认是否被选中
-
监听器OnCheckedChangedListener的使用。
RadioButton和RadioGroup的关系:
1、RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器
2、每个RadioGroup中的RadioButton同时最多只能有一个被选中
3、不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
4、大部分场合下,一个RadioGroup中至少有2个RadioButton
5、大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置
6. RadioGroup是LinearLayout的子类,所以它也有orientation的属性
-
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_toRightOf="@id/tv1"
android:contentDescription="性别的描述"
android:id="@+id/rg1"
>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/nan"
android:text="男" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:id="@+id/niu"
android:text="女" />
</RadioGroup>
- ImageButton控件
- 图片按钮,使用方法和Button按钮一样,它继承了ImageView,所以对于图片绽放的属性也是用scaleType,引入图片的属性是src
- 事件监听器的概念与作用
- 安卓的事件处理:不管是桌面应用程序还是手机应用程序,面对最多的就是用户,经常需要处理的就是用户动作,也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理。
-
安卓提供了两套强大的事件处理机制:
》基于监听的事件处理
》基于回调的事件处理
对于安卓基于监听的事件处理而言,主要做法就是为安卓界面组件绑定特定的事件监听器,比如说前面的按钮的OnclickListener,复选框和单选按钮的事件监听。
对于安卓基于回调的事件处理而言,主要做法就是重写安卓组件特定的回调方法或者重写Activity的回调方法。
一般来说,基于回调的事件处理可用于处理一些具有通用性的事件,但对于某些特定的事件,无法使用基于回调的事件处理,只能采用基于监听的事件处理。
基于监听的事件处理模型:主要涉及如下三类对象。
事件源(Event source):事件发生的场所,通常就是各个组件,例如按钮,窗口,菜单等。
事件(Event):封装了界面组件上发生的特定事情(通常就是一次用户操作),如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。
事件监听器(Event Listener):负责监听事件源发生的事件,并对各种事件做出相应的响应。
提示:在JAVA中事件监听器的核心就是一个特定的类所包含的方法,这些方法也被称为事件处理器。
当用户按下一个按钮或者单击某个菜单时,这些动作就会激发一个相应的事件,比如说按钮,点一下,就会激发一个点击事件,这个事件就会触发事件源上注册的事件监听器,当触发了这个事件,希望有人去处理这个事件,所以先给这个按钮去注册一个监听器,事件监听器被触发时就会调用对应的事件处理器来做出相应的响应。
安卓事件处理机制是一种委派式事件处理方式,事件源(按钮)将事件处理委托给特定的对象(事件监听器),当事件源发生指定事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。
每个组件均可以针对特定的事件指定一个事件监听器,每上事件监听器也可监听一个或者 多个事件源,因为同一个事件源上可能发生多种事件,委派式事件处理方式可以把事件源上所有可能发生的事件分别授权给不同的事件监听器来处理,同时也可以让一类事件都使用同一个事件监听器来处理。
-
例如某单位(事件源)发生了火灾(事件),该单位通常不会自己处理该事件,而是将事件委派给消防局(事件监听器)处理,如果发生了打架事件,则委派给公安局处理,而消防局和公安局也同时会监听多个单位的火灾,打架事件。这种委派式的处理方式将事件源来事件监听器分离,从而提供更好的程序模型,提高程序的可维护性。
流程示意图:
-
-