1#### GridView
xml:
在java中自己创建视图时需要通过要添加的目标容器的LayoutParams来配置布局参数(宽高、边距等等)
#### 弹出框
使用Activity自带的showDialog方法来显示
showDialog(100); //参数为id
这个方法调用之后Activity会去找有没有该id的Dialog,没有则触发onCreateDialog方法
填充创建Dialog的逻辑
//弹出框的构造器
列表框,可以通过builder对象的setItems设置列表
针对字符串数组,可以在资源下通过<string-array>定义
java中获取数组资源
#### Toast
自定义Toast
#### 通知
Notification表示一个通知对象,可以描述一个状态栏上的通知信息
NotificationManager表示一个通知服务,通知显示和隐藏的功能
悬浮框与菜单栏
xml:
<GridView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3" 列数
android:horizontalSpacing="5dp" 单元格的水平间距
android:verticalSpacing="5dp" 单元格的垂直间距
android:stretchMode="columnWidth" > 拉伸方式
</GridView>
在java中自己创建视图时需要通过要添加的目标容器的LayoutParams来配置布局参数(宽高、边距等等)
iv = new ImageView(GridViewActivity.this);
iv.setScaleType(ScaleType.FIT_CENTER);
// 添加宽高
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
LayoutParams.MATCH_PARENT, 200);
//运用布局参数
iv.setLayoutParams(lp);
iv.setBackgroundColor(0xff333333);
#### 弹出框
使用Activity自带的showDialog方法来显示
showDialog(100); //参数为id
这个方法调用之后Activity会去找有没有该id的Dialog,没有则触发onCreateDialog方法
protected Dialog onCreateDialog(int id) {
//创建dialog
if(id ==100){
return create2BtnDialog();
}
return super.onCreateDialog(id);
}
填充创建Dialog的逻辑
//弹出框的构造器
AlertDialog.Builder b = new AlertDialog.Builder(this);
//组装弹出框标题
b.setTitle("两个按钮的弹出框");
//组装弹出框内容
b.setMessage(R.string.dialog_msg);
//设置一个正向按钮
b.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(LearnDialogActivity.this, "确定按钮被点击", 2000).show();
}
});
b.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(LearnDialogActivity.this, "取消按钮被点击", 2000).show();
}
});
//创建Dialog对象
Dialog dialog = b.create();
自己来控制显示和隐藏,可以直接调用Dialog的show方法显示,dismiss方法或者cancel方法隐藏
if(null == twoBtnDialog){
twoBtnDialog = create2BtnDialog();
}
//显示弹出框
twoBtnDialog.show();
隐藏
dialog.dismiss(); -->可以通过dialog.setOnDismissListener(listener)监听到
或者
dialog.cancel(); -->用dialog.setOnCancelListener(listener)监听
列表框,可以通过builder对象的setItems设置列表
final String[] items = {"打开","复制","剪切","重命名","删除","发送到"};
b.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTitle(items[which]);
//处理列表点击的逻辑,which表示列表的下标
}
});
针对字符串数组,可以在资源下通过<string-array>定义
<string-array name="m_array">
<item>打开</item> 每个item表示一个数组项
<item>复制</item>
</string-array>
java中获取数组资源
String[] ary = getResources().getStringArray(R.array.m_array);
#### Toast
Toast t = Toast.makeText(this, "我是一个提示,你只能看看", Toast.LENGTH_SHORT);
//设置显示位置(相对位置,x方向的偏移,y方向的偏移)
t.setGravity(Gravity.LEFT|Gravity.TOP, 50, 200);
t.show();
自定义Toast
View layout = getLayoutInflater().inflate(R.layout.toast_layout, null);
TextView tv = (TextView) layout.findViewById(R.id.toast_content);
tv.setText("ABC");
Toast t = new Toast(getApplicationContext()); //Context上下文对象-->环境
//应用环境(组件窗口 服务) 窗口环境(Activity)
//设置布局
t.setView(layout);
t.setGravity(Gravity.CENTER, 0, 0);
//设置事件
t.setDuration(Toast.LENGTH_LONG);
t.show();
#### 通知
Notification表示一个通知对象,可以描述一个状态栏上的通知信息
NotificationManager表示一个通知服务,通知显示和隐藏的功能
nManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
显示通知
判断当前所在的平台版本,可以使用Build.VERSION.SDK_INT
if (Build.VERSION.SDK_INT >= 16) {
Notification.Builder b = new Notification.Builder(
getApplicationContext());
// 组装信息
// 在状态栏上停留一段时间之后小时的提示文本
b.setTicker("您有新短消息");
b.setSmallIcon(R.drawable.ic_launcher);
// 配置下拉的内容标题
b.setContentTitle("短信");
b.setContentText("今天天气晴朗,啦啦啦啦啦");
// 配置通知时间
b.setWhen(System.currentTimeMillis());
// 点击通知,跳转到一个目标组件
Intent it = new Intent(NotificationActivity.this,
MyListActivity.class);
//延迟的意图(Context对象,意图的id,具体的意图,意图更新方式)
PendingIntent pIntent = PendingIntent.getActivity(
NotificationActivity.this, 1, it,
PendingIntent.FLAG_UPDATE_CURRENT);
b.setContentIntent(pIntent);
// 显示通知
n = b.build();
}
显示通知
nManager.notify(123456, n);
取消显示
nManager.cancel(123456);
Notification的额外设置
//提醒的高级功能(闪灯、声音、震动)
n.defaults = Notification.DEFAULT_LIGHTS;
//通知的清除方式(FLAG_AUTO_CANCEL自动清除,FLAG_NO_CLEAR不自动清除)
n.flags = Notification.FLAG_NO_CLEAR;
自定义通知
//创建RemoteViews(应用包名,布局id)
RemoteViews remoteView = new RemoteViews(
"com.xykj.android_apidemo", R.layout.notify_layout);
remoteView.setTextViewText(R.id.m_text, "这是一个自定义的通知内容");
remoteView.setOnClickPendingIntent(R.id.m_btn, pIntent);
//设置自定义的下拉内容
b.setContent(remoteView);
九宫格
public class GridViewActivity extends Activity {
private int[] images = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
R.drawable.pic4, R.drawable.pic5, R.drawable.pic6, R.drawable.pic7,
R.drawable.pic8, R.drawable.pic9 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_avtivity_layout);
GridView mGrid = (GridView) findViewById(R.id.m_grid);
// 需要有适配器,设置适配器
MyGridAdapter adapter = new MyGridAdapter();
mGrid.setAdapter(adapter);
}
class MyGridAdapter extends BaseAdapter {
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int position) {
return images[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 准备显示的视图
ImageView iv;
if (null == convertView) {
iv = new ImageView(GridViewActivity.this);
iv.setScaleType(ScaleType.FIT_CENTER);
// 添加宽高
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
LayoutParams.MATCH_PARENT, 200);
// iv.setPadding(left, top, right, bottom)
iv.setLayoutParams(lp);
iv.setBackgroundColor(0xff333333);
}else{
iv = (ImageView) convertView;
}
// 将数据跟视图关联
iv.setImageResource(images[position]);
return iv;
}
}
}
悬浮框与菜单栏
public class PopuWindowActivity extends Activity implements OnClickListener {
private Button btnShow;
private Button btnPopuMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popu_window_activity);
btnShow = (Button) findViewById(R.id.m_btn1);
btnShow.setOnClickListener(this);
btnPopuMenu = (Button) findViewById(R.id.m_btn2);
btnPopuMenu.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.m_btn1:
showPopuWindow();
break;
case R.id.menu_01:
// 隐藏窗口
window.dismiss();
Toast.makeText(this, "扫一扫", 2000).show();
break;
case R.id.menu_02:
window.dismiss();
Toast.makeText(this, "发起群聊", 2000).show();
break;
case R.id.m_btn2:
showPopuMenu();
break;
default:
break;
}
}
private PopupWindow window;
private void showPopuWindow() {
if (null == window) {
// 先加载窗口的布局
View layout = getLayoutInflater().inflate(R.layout.popu_layout,
null);
layout.findViewById(R.id.menu_01).setOnClickListener(this);
layout.findViewById(R.id.menu_02).setOnClickListener(this);
// 创建了弹出框
window = new PopupWindow(layout, 200,
ViewGroup.LayoutParams.WRAP_CONTENT);
// 配置弹出框的其他信息
// 设置背景(能够响应返回键)
window.setBackgroundDrawable(new ColorDrawable());
// 设置获取焦点
window.setFocusable(true);
window.setOutsideTouchable(true);
}
// 显示窗口
window.showAsDropDown(btnShow, -100, 0);
// window.showAtLocation(parent, gravity, x, y)
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.main, menu);
// return true;
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// return super.onOptionsItemSelected(item);
// }
private PopupMenu pMenu;
private void showPopuMenu() {
if (null == pMenu) {
// 创建PopuMenu(第二个参数表示触发该弹出菜单的视图)
pMenu = new PopupMenu(this, btnPopuMenu);
// 向popumenu中添加菜单
pMenu.getMenuInflater().inflate(R.menu.main, pMenu.getMenu());
// 设置菜单项的点击监听
pMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// 根据菜单项的id来区分菜单
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(PopuWindowActivity.this,
item.getTitle(), 2000).show();
break;
}
return true;
}
});
}
pMenu.show();
}
}