Android控件介绍
多选按钮(CheckBox)
CheckBox有两个常用的事件,OnClickListener事件和OnClickChangeListener事件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<CheckBox
android:id="@+id/eat_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Eat"/>
<CheckBox
android:id="@+id/sleep_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/eat_checkBox"
android:text="Sleep"/>
</RelativeLayout>
效果如下:
代码:
package com.example.z1178.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
public class MainActivity extends Activity {
private static final String TAG="debug";
private CheckBox eat_checkBox;
private CheckBox sleep_checkBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linear_layout);
eat_checkBox=(CheckBox)findViewById(R.id.eat_checkBox);
sleep_checkBox=(CheckBox)findViewById(R.id.sleep_checkBox);
OnCheckBoxClickListener listener1=new OnCheckBoxClickListener();
CompoundButton.OnCheckedChangeListener listener2=new OnCheckedChangeListener();
//绑定点击事件
eat_checkBox.setOnClickListener(listener1);
sleep_checkBox.setOnClickListener(listener1);
//绑定状态改变事件
eat_checkBox.setOnCheckedChangeListener(listener2);
sleep_checkBox.setOnCheckedChangeListener(listener2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class OnCheckBoxClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
CheckBox box=(CheckBox)v;
int id=v.getId();
switch (id){
case R.id.eat_checkBox:Log.d(TAG,"eat_checkBox is clicked!:" + box.isChecked());break;
case R.id.sleep_checkBox:Log.d(TAG, "sleep_checkBox is clicked:" + box.isChecked());break;
}
}
}
class OnCheckedChangeListener implements CompoundButton.OnCheckedChangeListener{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CheckBox box=(CheckBox)buttonView;
Log.d(TAG,box.getText()+" checkBox changed ,its statue is "+isChecked);
}
}
}
若要在界面上增加全选按钮,则先在xml中增加相应的控件,然后在代码中获取该对象,然后绑定OnClickChangeListener事件,关键代码如下:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CheckBox box=(CheckBox)buttonView;
int id=box.getId();
if(id!=R.id.checkall_checkBox){
Log.d(TAG,box.getText()+" checkBox changed ,its statue is "+isChecked);
}else{
eat_checkBox.setChecked(isChecked);
sleep_checkBox.setChecked(isChecked);
}
}
单选按钮(RadioButton)
单选按钮有RadioButton和RadioGroup,其事件与CheckBox一样,也有OnClickListener事件和OnClickChangeListener事件,不再赘述。
ImageView
配置控件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="wrap_content"
android:id="@+id/imageView"
android:layout_height="wrap_content"
android:src="@drawable/layout_image"
/>
</RelativeLayout>
我们也可以通过在代码中设置图片
imageView.setImageResource(R.drawable.layout_image);
imageView为ImageView对象,R.drawable.layout_image为drawable中的图片
ScaleType
ScaleType可以控制图片的相关属性,其属性如下:
属性 |
---|
CENTER |
CENTER_CROP |
CENTER_INSIDE |
FIT_CENTER(START,END) |
FITXY |
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#ff0000"
android:scaleType="fitCenter"
android:src="@drawable/layout_image"
/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/beauty"
android:background="#0000ff"
android:scaleType="fitCenter"
android:layout_below="@+id/imageView1"
/>
</RelativeLayout>
效果如图:
其中,我们设置了图片的width和height为100dp,scaleType为fitCenter,同时设置了背景色,图片会按照width和height等比例缩放,不够的地方背景色填充。
若其中一个的scaleType为fitStart时,效果如下:
scaleType为center时:
此时图片大于规定的尺寸,则进行裁剪,小于规定尺寸的则居中显示,注意此时无背景色了。
scaleType为centerInside时:
centerInside与centerFit的区别是,当图片过大时,两者没有区别,但是当图片小于规定尺寸时,centerFit会进行放大以适应尺寸,而centerInside不会这样做,只是放在中央。
scaleType为centerCrop时:
centerCrop为图片的短边于尺寸短边按比例缩放,长边过长则截取掉,因此其是没有背景色的。
当然,我们也可以在代码中实现图片的缩放。
imageView.setScaleType(ScaleType.CENTER);
其参数为枚举类型。
TimePicker和DatePicker
TimePicker和DatePicker均有OnTimeChangedListener事件。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TimePicker>
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/timePicker"
>
</DatePicker>
</RelativeLayout>
package com.example.z1178.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TimePicker;
public class MainActivity extends Activity {
private static final String TAG="debug";
private TimePicker timePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linear_layout);
timePicker=(TimePicker)findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
//设置监听器和绑定事件
timePickerChangedListener listener=new timePickerChangedListener();
timePicker.setOnTimeChangedListener(listener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class timePickerChangedListener implements TimePicker.OnTimeChangedListener{
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
Log.d(TAG,hourOfDay+":"+minute);
}
}
}
默认情况下,时间显示的是当前系统时间,我们可以在代码中设置时间,还有,我们可以通过页面上的按钮设置监听器来获得时间。注意,月份是从0开始的 。
AnalogClock和DigitalClock这里就不介绍了。
ProgressBar,SeekBar和RatingBar
ProgressBar的属性:
属性1 | 属性2 | 方法 |
---|---|---|
水平风格 (Horizontal) | 判断是否是圆形进度条(isIndeterminated) | 最大进度(max) |
小风格 (Samll) | 增加进度(incrementProgressBy) | 当前进度(progress) |
大风格 (Large ) | 增加第二进度(incrementSecondProgressBy) | 第二进度(secondProgress) |
反向风格 (Large.Inverse) | ||
大反向风格 (Inverse) | ||
小反向风格 (Samll.Inverse) |
SeekBar的监听事件
事件 |
---|
onProgressChanged(SeekBar seekBar,int progress,boolean fromUser) |
onStartTrackingTouch(SeekBar seekBar) |
onStopTrackingTouch(SeekBar seekBar) |
RatingBar的属性:
属性 | 事件 |
---|---|
星星个数(numStars) | onRatingBarChanged(RatingBar ratingBar,float rating,boolean fromUser) |
当前等级(progress) | |
stepSize |
版权声明:本文为博主原创文章,未经博主允许不得转载。