一、ScrollView 滚动视图
由FrameLayout派生而出,用于为普通组件添加滚动条的组件。它最多只能包含一个组件,ScrollView的作用就是为该组件添加垂直滚动条。(如果需要添加水平滚动条,则可借助HorizontalScrollView来实现,用法基本相似。)
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 定义HorizontalScrollView,为里面的组件添加水平滚动条 -->
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="fill_parent">
.......
</LinearLayout>
</HorizontalScrollView>
</ScrollView>
二、Notification 手机状态栏的通知
程序一般通过NotificationManager服务来发送Notification(如未读微信在状态栏的提示):
用法示例:
// 获取系统的NotificationManager服务
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 创建一个启动其他Activity的Intent(必须定义OtherActivity)
Intent intent = new Intent(NotificationTest.this
, OtherActivity.class);
PendingIntent pi = PendingIntent.getActivity(
NotificationTest.this, 0, intent, 0);
Notification notify = new Notification.Builder(this)
// 设置打开该通知,该通知自动消失
.setAutoCancel(true)
// 设置显示在状态栏的通知提示信息
.setTicker("有新消息")
// 设置通知的图标
.setSmallIcon(R.drawable.notify)
// 设置通知内容的标题
.setContentTitle("您有新的消息")
// 设置通知内容
.setContentText("XXX给您发送了3条消息")
// // 设置使用系统默认的声音、默认LED灯
// .setDefaults(Notification.DEFAULT_SOUND
// |Notification.DEFAULT_LIGHTS)
// 设置通知的自定义声音
.setSound(Uri.parse("android.resource:R.raw.msg))
.setWhen(System.currentTimeMillis())
// 设改通知将要启动程序的Intent
.setContentIntent(pi).build();
// 发送通知
nm.notify(NOTIFICATION_ID, notify);
三、对话框
1.AlertDialog
由AlertDialog生成的对话框分为图标区、标题区、内容区和按钮区4个区域。
构建一个对话框需要经过以下步骤:
eg1.简单对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this)
//设置对话框显示的view
.setView(xxxDialog)
// 设置对话框标题
.setTitle("简单对话框")
// 设置图标
.setIcon(R.drawable.tools)
//设置该对话框显示的View
.setView(View src)
.setMessage("对话框的测试内容\n第二行内容");
// 为AlertDialog.Builder添加【确定】按钮
.setPositiveButton("保存",new onClickListener(){...});
// 为AlertDialog.Builder添加【取消】按钮
.setNegativeButton("取消",null)
.create()
.show();
其中,setPositiveButton和setNegativeButton方法的代码如下:
private AlertDialog.Builder setPositiveButton(
AlertDialog.Builder builder)
{
// 调用setPositiveButton方法添加确定按钮
return builder.setPositiveButton("确定", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
show.setText("单击了【确定】按钮!");
}
});
}
private AlertDialog.Builder setNegativeButton(
AlertDialog.Builder builder)
{
// 调用setNegativeButton方法添加取消按钮
return builder.setNegativeButton("取消", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
show.setText("单击了【取消】按钮!");
}
});
}
eg2.简单列表项对话框
String[] items = new String[] {"xxx","xxx","xxx","xxx",... };
AlertDialog.Builder builder = new AlertDialog.Builder(this)
// 设置对话框标题
.setTitle("简单列表项对话框")
// 设置图标
.setIcon(R.drawable.tools)
// 设置简单的列表项内容
.setItems(items, new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
show.setText("你选中了《" + items[which] + "》");
}
});
// 为AlertDialog.Builder添加【确定】按钮
setPositiveButton(builder);
// 为AlertDialog.Builder添加【取消】按钮
setNegativeButton(builder)
.create()
.show();
eg3.单选列表项对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this)
// 设置对话框标题
.setTitle("单选列表项对话框")
// 设置图标
.setIcon(R.drawable.tools)
// 设置单选列表项,默认选中第二项(索引为1)
.setSingleChoiceItems(items, 1, new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
show.setText("你选中了《" + items[which] + "》");
}
});
// 为AlertDialog.Builder添加【确定】按钮
setPositiveButton(builder);
// 为AlertDialog.Builder添加【取消】按钮
setNegativeButton(builder)
.create()
.show();
eg4.多选列表项的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this)
// 设置对话框标题
.setTitle("多选列表项对话框")
// 设置图标
.setIcon(R.drawable.tools)
// 设置多选列表项,设置勾选第2项、第4项
.setMultiChoiceItems(items
, new boolean[]{false , true ,false ,true}, null);
// 为AlertDialog.Builder添加【确定】按钮
setPositiveButton(builder);
// 为AlertDialog.Builder添加【取消】按钮
setNegativeButton(builder)
.create()
.show();
eg5.自定义列表项的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this)
// 设置对话框标题
.setTitle("自定义列表项对话框")
// 设置图标
.setIcon(R.drawable.tools)
// 设置自定义列表项
.setAdapter(new ArrayAdapter<String>(this
, R.layout.array_item
, items), null);
// 为AlertDialog.Builder添加【确定】按钮
setPositiveButton(builder);
// 为AlertDialog.Builder添加【取消】按钮
setNegativeButton(builder)
.create()
.show();
eg6.自定义view的对话框
step1.先定义一个页面布局
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loginForm"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="10pt"
/>
<!-- 输入用户名的文本框 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请填写登录帐号"
android:selectAllOnFocus="true"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="10pt"
/>
<!-- 输入密码的文本框 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请填写密码"
android:password="true"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="电话号码:"
android:textSize="10pt"
/>
<!-- 输入电话号码的文本框 -->
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请填写您的电话号码"
android:selectAllOnFocus="true"
android:phoneNumber="true"
/>
</TableRow>
</TableLayout>
step2.创建对话框
//装载/res/layout/login.xml界面布局
TableLayout loginForm = (TableLayout)getLayoutInflater()
.inflate( R.layout.login, null);
new AlertDialog.Builder(this)
// 设置对话框的图标
.setIcon(R.drawable.tools)
// 设置对话框的标题
.setTitle("自定义View对话框")
// 设置对话框显示的View对象
.setView(loginForm)
// 为对话框设置一个“确定”按钮
.setPositiveButton("登录" , new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
// 此处可执行登录处理
}
})
// 为对话框设置一个“取消”按钮
.setNegativeButton("取消", new OnClickListener()
{
@Override
public void onClick(DialogInterface dialog,
int which)
{
// 取消登录,不做任何事情。
}
})
// 创建、并显示对话框
.create()
.show();
四、DatePickerDialog、TimePickerDialog
用法不难,例如:
Calendar c = Calendar.getInstance();
// 直接创建一个DatePickerDialog对话框实例,并将它显示出来
new DatePickerDialog(DateDialogTest.this,
// 绑定监听器
new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet(DatePicker dp, int year,
int month, int dayOfMonth)
{
EditText show = (EditText) findViewById(R.id.show);
show.setText("您选择了:" + year + "年" + (month + 1)
+ "月" + dayOfMonth + "日");
}
}
//设置初始日期
, c.get(Calendar.YEAR)
, c.get(Calendar.MONTH)
, c.get(Calendar.DAY_OF_MONTH)).show();
}
如果是TimePicker,相应监听器为:
new TimePickerDialog(DateDialogTest.this,
// 绑定监听器
new TimePickerDialog.OnTimeSetListener()
{
@Override
public void onTimeSet(TimePicker tp, int hourOfDay,
int minute)
{
//more code here....
//设置初始时间
, c.get(Calendar.HOUR_OF_DAY)
, c.get(Calendar.MINUTE)
//true表示采用24小时制
, true).show();
}
五、ProgressDialog 进度对话框
用法如下:
//第一种方法:调用静态方法显示环形进度条
ProgressDialog.show(this, "任务执行中"
, "任务执行中,请等待", false, true);
//第二种方法
ProgressDialog pd = new ProgressDialog(ProgressDialogTest.this);
// 设置对话框的标题
pd.setTitle("任务正在执行中");
// 设置对话框显示的内容
pd.setMessage("任务正在执行中,敬请等待...");
// 设置对话框能用“取消”按钮关闭
pd.setCancelable(true);
// 设置对话框的进度条风格
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置对话框的进度条是否显示进度:false->显示;true->不显示
pd.setIndeterminate(true);
pd.show(); //②