Android的输入控件:
输入控件指的是Android通过界面与用户交互的组件. Android提供了多种输入控件, 比如Button, text field, seek bar, check box, zoom button, toggle button等.
向UI中添加一个输入控件十分的简单, 与向XML文件中添加普通的标签一样, 比如这是一个包含一个text field和一个button的layout文件:
<?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="fill_parent"
android:orientation="horizontal">
<EditText android:id="@+id/edit_message"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
<Button android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
</LinearLayout>
每种输入控件都可以响应若干输入事件, 我们可以通过处理这些事件来响应用户的操作, 比如当用户输入一串字符串或者点击一个button的时候.
普通控件:
这里有一个简单的列表, 列出了Android常用的一些控件, 除了表中列出的以外Android还有很多控件, 详情可以参考这里.
控件类型 | 描述 | 相关类 |
Button | 一个可以按下的按钮. 可以帮助用户处理指定操作. | Button |
Text field | 一个可编辑的文本域. 我们可以使用AutoCompleteTextView类来创建一个可以提供自动完成功能的文本域. | EditText AutoCompleteTextView |
Check box | 一个可供用户选择的选择框. 可以为用户提供一组不互斥的选择项. 就是多选框. | CheckBox |
Radio button | 跟checkbox相似, 但是只能选择一个, 就是单选框. | RadioGroup RadioButton |
Toggle button | 一个开关. | ToggleButton |
Spinner | 一个下拉列表, 允许用户选择一组数值中的一个. | Spinner |
Picker | 让用户可以通过滑动或者上下按键从一组数据中选择一个值. 使用DatePicker可以选择日期(哪年哪月), TimePicker则可以选择时间(几点几分). | DatePicker TimePicker |
Button:
一个按钮可以包含文本和图标, 当用户点击它的时候出发一个事件.
根据按钮是否包含图片和文字, 我们有三种创建按钮的方法:
只有文本, 我们可以使用Button类:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
只有图标, 我们可以使用ImageButton类:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
如果希望既有文本又有图标, 那么可以使用Button类, 并指定一个android:drawableLeft属性:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
响应点击事件:
当用户点击Button的时候, Button对象会收到一个on-click事件. 通过为<Button>的android:onClick属性, 我们可以为Button指定一个处理事件的方法. 该属性的值必须是一个方法的名字, 然后拥有这个layout的Activity必须实现这个方法. 比如这是一个XML文件:
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
它指定了Button的点击事件的处理方法, 是一个名为sendMessage的方法, 那么在使用这个layout的Activity中就必须实现这个方法:
/** Called when the user touches thebutton */
public void sendMessage(View view) {
// Do something in response to button click
}
该方法必须满足以下条件:
名字必须跟XML中定义的onClick属性一样.
必须为public方法
必须返回void
必须有并且只有一个View参数, 用于接收被点击的View.
使用OnClickListener:
我们也可以为Button指定一个监听事件Handler来处理点击事件, 而不是在XML中声明. 如果我们在运行时实例化Button或者需要在一个Fragment中处理点击事件, 那么就需要用到这种方法. 两步:
1. 创建一个View.onClickListener对象.
2. 通过button的setOnClickListener(View.onClickListener)绑定监听对象.
栗子:
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
为按钮添加样式:
同一个按钮的长相(背景图片和字体)在不同设备上可能会因为默认的主题不同而有所不同. 我们可以通过主题来确保整个APP的控件风格一致. 比我们可以在manifest.xml的<application>标签下指定”android:theme="@android:style/Theme.Holo", 来指定一个主题.
为了使每个Button都拥有独特的背景, 可以设置”android:background”属性, 它需要接收一个drawable资源或者颜色资源. 或者可以为一个按钮指定某个样式, 比如背景色, 字体, 大小等.
无边框按钮:
有时候可能会希望按钮没有边框. 功能上跟其它按钮无差, 只是没有边框. 我们需要borderlessButtonStyle样式来指定一个无边框的按钮, 栗子:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />
自定义背景:
除了自定义样式, 我们还可以为Button自定义背景, 这样可以使我们的Button更加的与众不同. 不止可以指定一个图片或者背景色, 我们还可以指定按钮在不同状态下的背景. 我们可以定义一个XML文件以指定不同状态下按钮的背景图片和颜色. 步骤如下:
1. 创建三个bitmap图片, 分别对应默认状态, 按下状态, 获得焦点状态. 为了保证图片可以适合button的不同尺寸, 请使用Nine-patch格式.
2. 将图片放入/res/drawable目录下, 文件名最好与状态相对应, 比如: button_default.9.png, button_pressed.9.png, 和button_focused.9.png.
3. 在/res/drawable下创建一个XML文件(比如名字叫button_custom.xml), 插入下列XML代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
该文件定义了一个可以自动根据状态改变而改变图片的drawable资源. 而且<item>的排列顺序很重要, 最后一个是default, 只有在state_pressed和state_focused都为false的时候才会使用default. 这个XML文件此时代表一个单独的drawable资源, 但是它会根据状态不同而变化.
4. 然后将Button的背景设置为这个XML资源文件即可:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
android:background="@drawable/button_custom" />
参考: http://developer.android.com/guide/topics/ui/controls/button.html
http://developer.android.com/guide/topics/ui/controls.html