一、Button组件的功能与用法
Button、CheckBox、RadioButton、RadioGroup 、ToggleButton 、Switch、ImageButton、CompoundButton:这些都属于按钮组件,这里重点介绍下 Button 的用法。
Button 继承了 TextView,所以 TextView 上很多属性也可以应用到 Button 上,他主要是在UI界面上生成一个按钮,可供用户单击。当用户单击按钮时,按钮会触发一个 onClick 事件,我们可以在这里处理自己想要的逻辑。
下面的例子实现一个功能更强大的按钮:
- 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 文字带阴影的按钮 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文字带阴影的按钮"
android:textSize="12pt"
android:shadowColor="#aa5"
android:shadowRadius="1"
android:shadowDx="5"
android:shadowDy="5"/>
<!-- 普通文字按钮 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/red"
android:text="普通按钮"
android:textSize="10pt"/>
<!-- 带文字的图片按钮-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:textSize="18px"
android:text="带文字的图片按钮"/>
</LinearLayout>
上面的布局中第一个是普通按钮,但是为该按钮指定了阴影(与TextView的配置方式相同);第二个按钮通过background配置了背景图片,因为图片是圆形的,所以在这里显示出圆形的样子;第三个按钮给背景指定了选择器,引用的Drawable资源对应如下:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 指定按钮按下时的图片 -->
<item android:state_pressed="true"
android:drawable="@drawable/red" />
<!-- 指定按钮松开时的图片 -->
<item android:state_pressed="false"
android:drawable="@drawable/purple" />
</selector>
我们实际开发中对于Button的,无非是对按钮的几个状态做相应的操作,比如:按钮按下的时候用一种颜色,弹起又一种颜色,或者按钮不可用的时候一种颜色这样!所以说这种方法我们会经常用到,以此指定松开和按下时的不同效果。
StateListDrawable 是 Drawable 资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector >,我们只需要将 Button 的 background 属性设置为该drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景!我们可以设置的属性有:
常用属性:
drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态
state_focused:是否获得焦点
state_window_focused:是否获得窗口焦点
state_enabled:控件是否可用
state_checkable:控件可否被勾选,eg:checkbox
state_checked:控件是否被勾选
state_selected:控件是否被选择,针对有滚轮的情况
state_pressed:控件是否被按下
state_active:控件是否处于活动状态,eg:slidingTab
state_single:控件包含多个子控件时,确定是否只显示一个子控件
state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态
运行效果图:
二、单选扭(RadioButton)和复选框(CheckBox)的功能与用法
RadioButton、CheckBox 都继承自 Button 类,但与普通按钮不同的是,他们都多了一个可选中的功能,因此他们可以额外指定一个 android:checked 属性,该属性用于指定 RadioButton、CheckBox 初始化的时候是否被选中。
栗子:用 RadioButton、CheckBox 获取用户信息
- MainActivity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取界面上rg、show两个组件
rg = (RadioGroup) findViewById(R.id.rg);
show = (TextView) findViewById(R.id.show);
// 为RadioGroup组件的OnCheckedChange事件绑定事件监听器
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// 根据用户勾选的单选按钮来动态改变tip字符串的值
String tip = checkedId == R.id.male ? "您的性别是男人": "您的性别是女人";
// 修改show组件中的文本
show.setText(tip);
}
});
}
上面的代码采用了“委托式”的事件处理机制,其原理是:当事件源上发生事情的时候,该事件会激发该事件源上的监听器的特定方法。
- main.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:"/>
<!-- 定义一组单选按钮 -->
<RadioGroup android:id="@+id/rg"
android:orientation="horizontal"
android:layout_gravity="center_horizontal">
<!-- 定义两个单选按钮 -->
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/male"
android:text="男"
android:checked="true"/>
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/female"
android:text="女"/>
</RadioGroup>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="喜欢的颜色:"/>
<!-- 定义一个垂直的线性布局 -->
<LinearLayout android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 定义三个复选框 -->
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="红色"
android:checked="true"/>
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝色"/>
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绿色"/>
</LinearLayout>
</TableRow>
<TextView
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</TableLayout>
如果在布局文件中指定了某个按钮默认选中的话,则必须为该组单选按钮指定android:id属性,否则不能正常工作。
运行效果:
三、ToggleButton 和 Switch 的功能与用法
ToggleButton 和 Switch 也是由 Button 派生而来的,因此 Button 的相关属性在这里也都起作用,这里给出更详尽的属性:
1、ToggleButton属性:
- android:checked:设置该按钮是否被选中
- android:textOff:设置该按钮状态关闭时显示的文本
- android:textOn:设置该按钮状态打开时显示的文本
2、Switch属性:
- android:showText:设置on/off的时候是否显示文字,boolean
- android:splitTrack:是否设置一个间隙,让滑块与底部图片分隔,boolean
- android:switchMinWidth:设置开关的最小宽度
- android:switchPadding:设置滑块内文字的间隔
- android:switchTextAppearance:设置开关的文字外观,暂时没发现有什么用…
- android:textOff:按钮没有被选中时显示的文字
- android:textOn:按钮被选中时显示的文字
- android:textStyle:文字风格,粗体,斜体写划线那些
- android:track:底部的图片
- android:thumb:滑块的图片
- android:checked:设置该按钮是否被选中
- android:textOff:设置该按钮状态关闭时显示的文本
- android:textOn:设置该按钮状态打开时显示的文本
- android:typeface:设置字体,默认支持这三种:sans、serif、monospace;除此以外还可以使用 其他字体文件(*.ttf),首先要将字体文件保存在assets/fonts/目录下,不过需要在Java代码中设置:
Typeface typeFace =Typeface.createFromAsset(getAssets(),"fonts/HandmadeTypewriter.ttf"); textView.setTypeface(typeFace);
联系方式: