7.1 UI控件
控件公用属性:
UI控件 | 描述 |
android:id | 用于被Activity引用的id值 |
android:layout_width/android:layout_height | 控件的宽度和高度 |
android:layout_marginLeft/Right/Top/Bottom | 控件距离某个控件的距离 |
android:gravity | 控件中内容的对齐方式 |
android:layout_gravity | 控件本身的对齐方式 |
android:background | 控件背景 |
android:visible | 控件是否可见 |
android:padding | 控件与其他控件的内边框距离 |
android:weight | 控件在父控件中所占的比率 |
表7.1.1 控件公共属性
7.1.1 TextView
用途:显示固定长度的文本字符串或标签
控件私有属性:
UI控件 | 描述 | 值 |
android:autoLink | 设置超链接,可以连接URL、电话、E-mail、map地图 | none、web、email、phone、map、all |
android:bufferType | getText()取得的文本类型 | editable、spannable |
android:capitalize | 设置英文字母大写类型,前提开启输入法输入 |
|
android:drawableBottom | 值为图片,则在文本框下方输出显示该图片,如果为颜色则作为textView的背景色,此优先级大于background的设置 |
|
android:drawableLeft/Top/Bottom/Left | 在左侧等输出一个图片 |
|
android:drawablePadding | 设置textView与图片的间隔 |
|
android:ellipsize | 当文本过长时的显示方式 | start(开头显示省略号)、end(皆为显示省略号)、middle(中间显示省略号)、marquee(跑马灯) |
android:gravity | 文本的显示位置 | center|right|left |
android:ems | 设置宽度为多少个字符 |
|
android:height/width | 设置文本高度、宽度 |
|
android:hint | 设置提示信息 |
|
android:maxems | 设置最大宽度字符 |
|
android:minems | 设置最短宽度字符 |
|
android:maxLength | 限制输入字符数 |
|
android:lines | 显示的行数 |
|
android:minLines | 最小显示行数 |
|
android:maxLines | 最大显示行数 |
|
android:lineSpacingExtra | 行间距 |
|
android:lineSpacingMultiplier | 设置行间距的倍数 |
|
android:password | 以星号*代替文本输出 |
|
android:singleLine | 设置单行显示 |
|
android:textAppearance | 设置文本外观 |
|
android:textColor | 设置文本颜色 |
|
android:textHighlight | 被选中文字的高亮显示 |
|
android:textColorHint | 设置文字颜色提示信息 |
|
android:textLinkColor | 设置文字连接的颜色 |
|
android:textScaleX | 设置文字间隔 |
|
android:textSize | 设置文字大小 |
|
android:textStyle | 设置文字样式 | 0(粗体)|1(斜体)|2(又粗又斜) |
表7.1.2 TextView私有属性
使用方式:
1. 在Android Manifest配置文件中写入TextView的配置。譬如:
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/testWord"
/>
代码片段7.1.1.1 TextView在AndroidManfiest中的写法
注意:如果需要在Activity中调用TextView控件,那么就必须要写它的id值,否则无法查找到该控件。
text的引用可以通过string的资源文件,也可以通过直接以字符串的形式传入。不过Android推荐的是通过string的资源引入,如果强制使用字符串就会出现警告。
2. 在Activity中调用
private TextView view;
view = (TextView)this.findViewById(R.id.text);
代码片段7.1.1.2 TextView在Activity中的调用
注意:如果想要修改TextView中的文字的话,就可以用setText()的方法。
创建上下文链接:
这个功能是通过android:autoLink来实现的,它的属性在上面的表中已经给出了。我在这里简单描述下它的各个属性的功能:
1. none:所有链接无效
2. web:url链接
3. phone:电话链接,给出的号码会自动填充到电话界面
4. map:地图链接,会自动匹配相同的地址
5. email:电子邮件链接,会打开邮件程序
6. all:所有上述链接有效
7.1.2 EditText
作用:从用户那里获取数据
EditText的私有属性:
属性 | 描述 | 值 |
android:numeric | 设置输入类型 |
|
android:autoText | 自动拼写,前提是开启输入法 |
|
android:digitis | 设置接受数字的类型 |
|
android:phoneNumber | 输入的为电话号码 |
|
android:editable | 是否可编辑 |
|
android:freezesText | 设置保存文本的内容及光标位置 |
|
android:inputMethod | 为文本指定输入法 |
|
android:inputType | 制定输入类型 |
|
android:cursorVisible | 光标是否可见 | true|false |
表7.1.3 EditText的私有属性
注释:因为其属性过多,但是TextView中拥有的,EditText都可以拥有,所以,这些属性是基于TextView的属性来说的。
使用方式:
与TextView大同小异,这里不再述说,以后的控件的使用方式也不会再述说。因为控件使用都一样,无法定义xml,之后再在Activity找到控件调用的这种方式。
自动填充:
使用AutoCompleteTextView控件,具体在AutoCompleteTextView中描述。
输入过滤:
this.editText.setFilters(new InputFilter[] {
new InputFilter.AllCaps(),
new InputFilter.LengthFilter(2)
});
代码片段7.1.2.1 过滤器代码
7.1.3 Spinner
作用:提供可选输入。
私有属性:
属性 | 描述 | 值 |
android:dropDownHorizontalOffset android:dropDownVerticalOffset | 下拉的项目窗口相对于Spinner窗口水平、垂直的偏移量 |
|
android:dropDownSelector | 设定列表选择器的效果 |
|
android:dropDownWidth/Hight | 设定下拉框的宽度和高度 |
|
android:gravity | 当前选择项目的对齐方式 | top|bottom|left|right|center_vertical|fill_vertical|center_horizontal|center|fill|clip_horizontal|start|end |
android:popupBackground | 设置下拉背景 |
|
android:prompt | 项目选择对话框的显示提示 |
|
android:spinnerMode | 显示模式 | dialog|dropdown |
表7.1.4 Spinner私有属性
使用注意点:
在引入项目的时候,需要预先定义好array类型的String Array
7.1.4 按钮、多选框和单选组
Button作用:提交表单、确认选择之类
多选框作用:用作多项选择
单选框作用:用作单选,比如性别选择
这三者的使用方式很简单,而且私有属性基本是共有属性的一些属性,我就不具体说了,上例子:
Button例子:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/button" />
代码片段7.1.4.1 Button例子
CheckBox例子:
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/radioGroup1"
android:layout_alignLeft="@+id/radioGroup1"
android:layout_marginBottom="122dp"
android:text="@string/checkbox" />
代码片段7.1.4.2 CheckBox例子
RadioGroup例子:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true">
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/radio1" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio2" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/radio3" />
</RadioGroup>
代码片段7.1.4.3 RadioGroup例子
7.1.5 DatePicker、TimePicker
作用:设置时间日期
私有属性:
属性 | 描述 | 值 |
android:calendarViewShown | 是否显示日历选择 | true|false |
android:endYear | 最大可选择的年份 |
|
android:maxDate/minDate | 最大、最小显示日期 |
|
android:spinnerShown | 是否显示滚动式选择 |
|
android:startyear | 设置开始年份 |
|
表7.1.5 DatePicker私有属性
注意:如果不设置calendarViewShown和spinnerShown这两个属性,则两个都会显示,如果屏幕过窄,则会发生两者互相覆盖的情况。
另:TimeSpicker则相对简单,只需要直接使用即可,不需要特别设置,如果需要24小时进制显示,则可以利用setIs24Hours()方法来设置。
7.1.6 ProgressBar
作用:显示完成度
私有属性:
属性 | 描述 | 值 |
style | 样式 | ?android:attr/progressBarStyleLarge ?android:attr/progressBarStyleSmall ?android:attr/progressBarStyleHorizontal |
android:max | 最大进度 |
|
android:progress | 当前进度 |
|
android:secondaryProgrss | 次要进度 |
|
android:indeteminate | 设置不确定模式,前提:水平进度条 |
|
表7.1.6 ProgressBar私有属性
注释:ProgressBar也可以通过调用系统在标题栏上显示进度。用法如下:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_PROGRESS);
代码片段7.1.6.1ProgressBar系统进度条
7.2 对话框
对话框有一下几种:
对话框 | 描述 |
Dialog | 所有Dialog的基类 |
AlertDialog | 警告对话框,通过构造函数可以构建一个、二个或者三个按钮的对话框 |
CharacterPickerDialog | 用于简单显示字符或这选择的对话框 |
DatePickerDialog | 日期选择对话框 |
ProgressDialog | 显示模糊或非模糊进度条的对话框 |
TimePickerDialog | 时间选择对话框 |
表7.1.6 对话框类型
注释:这些都是现成的对话框,如果上述的满足不了要求,也可以通过继承Dialog来自己定义自己的对话框。
7.2.1 对话框的生命周期
Activity在启动一次对话框后,可能之后会重复使用。
Android构建Dialog的步骤如下:
1. 定义对话框
注释:定义一个唯一标识来标识这个Dialog,并且通过这个id来查找Dialog池,返回查找到的Dialog。如果没有查找到,那么就会创建这个新的对话框。
2. 初始化对话框
因为Dialog对象被Activity保存在Dialog对象池中,所以有必要每次在调用的时候重新初始化,为了这个,必须重写onPrepareDialog()方法。
3. 启动对话框
Activity通过调用showDialog(int id)的方法来显示一个对话框,这个时候可以把Dialog的唯一标识传入,来进行显示。
4. 关闭对话框
Activity会自动将对话框解散(dismiss),回收到Dialog池中,但不会移除。想要手动解散可以用dismissDialog()方法,前提传入Dialog的ID。如果想要将它永久移除,则可以用removeDialog()方法。
5. 关闭Activity
关闭Activity后,Dialog池消失,自然Dialog永久消除。
7.3 自定义对话框
自定义Dialog大致分为下面几个步骤:
1. 设计Dialog的布局文件
2. 定义一个继承Dialog的自定义对话框类
3. 在主Activity中声明该类,并且show,即可。
以下上代码:
dialog.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:layout_height="100dp"
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" >
<Button
android:id="@+id/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text="@string/confirm" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/confirm"
android:layout_alignBottom="@+id/confirm"
android:layout_alignParentRight="true"
android:text="@string/cancel" />
</RelativeLayout>
代码片段7.3.1
MyDialog.java:
package com.example.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.androidstudy_dialog.R;
public class MyDialog extends Dialog {
private Button confirm;
private Button cancel;
private ButtonListener listener;
private String title;
public MyDialog(Context context) {
super(context);
this.title = "dialog";
}
public MyDialog(Context context, String title){
this(context);
this.title = title;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
setTitle(title);
this.confirm = (Button) this.findViewById(R.id.confirm);
this.cancel = (Button) this.findViewById(R.id.cancel);
this.listener = new ButtonListener();
this.confirm.setOnClickListener(this.listener);
this.cancel.setOnClickListener(this.listener);
}
private class ButtonListener implementsandroid.view.View.OnClickListener {
@Override
public void onClick(View view) {
if (view.getId() == R.id.confirm) {
dismiss();
} else if (view.getId() == R.id.cancel) {
dismiss();
}
}
}
}
代码片段7.3.2
MyActivity.java
package com.example.androidstudy_dialog;
import com.example.dialog.MyDialog;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.view.Menu;
public class MainActivity extends Activity {
private Dialog dialog ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.dialog = new MyDialog(this);
this.dialog.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
代码片段7.3.3