好了,进入界面开发的第三篇,今天我们要看的是Menu和Dilog:
Menu:菜单
Dialog: 对话框
首先还是贴代码:
(1)layout/activity_main.xml :
(2)layout/dailog.xml (这个文件是用来构建自定义对话框时用到的) :
(4)MainActivity.java:
进入解释篇:
Menu:
我们这里采用的xml文件配置menu的方式,当 然也有其他方法,这里当然讲最简单易懂的方法。 res/menu/ 目录专门用来配置 menu的资源文件夹,放在menu/目录下的xml文件都将作为菜单资源被引用,根节点是menu,里面的项目有item 和 group 两种,顾名思义吧,你懂的。
配置:
Activity中实例化menu,直接重写Activity的 onCreateOptionsMenu,然后使用 MenuInflater 加载 我们menu目录下的 main.xml 文件作为菜单:
监听事件,这就很简单,当某一项被选中时执行,这里通过 item.getItemId() 返回 android:id 来判断是那一项被选中。
Dialog:
这个实例中有两个Dialog,第一个是系统样式的,第二个使我们添加过view自定义的,其实这里自定义dialog和系统样式的区别在于就是添加了一个View,当然也可以修改Dialog的其他样式,不在这里讲解,我们直接来看自定义的Dialog:
Dialog中添加的View, res/layout/dialog.xml (这里又是登陆界面):
重点来看怎么初始化Dialog的:
Inflater 找了一下英文翻译,姑且把它叫做 填充器吧, 我认为Inflater的作用就和他的名字一样,是把 layout, menu 等xml的配置文件填充到 View当中,然后我们再将View显示出来。
第一行是构造 LayoutInflater, 然后第二步用 inflater 将 dialog.xml 填充到View中, inflate(R.layout.dialog, null),第二个参数是root,就是我们上一级布局的意思,我们这里传为null。
这里我把监听事件的部分删掉了,一目了然,我们使用AlertDialog.Buider 来创建Dialog,当调用create() 方法后,返回值为一个 AlertDialog。里面有一个set方法,就是设置对话框的参数,其中最重要的是 setView() 添加我们自己够着的view。setTitle() 设置对话框的标题, setPositivebutton 和 setNegativeButton 就是添加确定和取消按钮,第二个参数是监听事件:DialogInterface.OnClickListener,点击按钮时触发,很简单。
最后我们看点击事件里面我们做了什么:
ProgressDialog 是系统内置的带有圆形进度条的对话框,当调用show()方法后会显示在屏幕中间,运行效果参看实例。然后我们启动了一个线 程,sleep(10*1000) 10秒后关掉进图条Dialog。当然在真实开发中应该是做完操作之后,发送消息关闭进度条,以后再做实例。
好了,今天就写到这里!
来源: <http://write.blog.csdn.net/postedit>
Menu:菜单
Dialog: 对话框
首先还是贴代码:
(1)layout/activity_main.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
(2)layout/dailog.xml (这个文件是用来构建自定义对话框时用到的) :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账号:"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_username"
android:autoText="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_password"
android:autoText="true"
/>
</LinearLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/about"
android:title="关于"/>
<item
android:id="@+id/out"
android:title="退出"/>
<group android:id="@+id/group1" >
<item
android:id="@+id/item1"
android:title="item1">
</item>
<item
android:id="@+id/item2"
android:title="item2">
</item>
<item
android:id="@+id/item2"
android:title="item2">
</item>
</group>
</menu>
(4)MainActivity.java:
package com.example.demo_ui2;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private Context mCtx;
private ProgressDialog mProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCtx = MainActivity.this;
// 对话框
// 1.使用AlertDialog创建对话框
Dialog dialog = new AlertDialog.Builder(mCtx)
.setTitle("登陆提示")
.setMessage("这里需要登陆!")
.setPositiveButton("确定" , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View dialogView = inflater.inflate(R.layout.dialog, null);
AlertDialog dlg = new AlertDialog.Builder(mCtx)
.setTitle("登陆框")
.setView(dialogView)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mProgressDialog = new ProgressDialog(mCtx);
mProgressDialog.setTitle("登陆中");
mProgressDialog.setMessage("请稍后..");
mProgressDialog.setCancelable(true);
mProgressDialog.show();
new Thread() {
@Override
public void run() {
try{
sleep(10000);
} catch(Exception e){
e.printStackTrace();
} finally{
mProgressDialog.dismiss();
}
}
}.start();
}
})
.setNegativeButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
})
.create();
dlg.show();
}
})
.setNegativeButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
})
.setNeutralButton("隐藏", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create();
dialog.show();
}
//创建menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater= getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
//menu的按键事件
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
switch(itemId){
case R.id.item1:
showToast("item1");
break;
case R.id.item2:
showToast("item2");
break;
case R.id.about:
showToast("about");
break;
case R.id.out:
finish();
break;
}
return super.onMenuItemSelected(featureId, item);
}
private void showToast(String content){
Toast.makeText(mCtx, content, Toast.LENGTH_SHORT).show();
}
}
进入解释篇:
Menu:
我们这里采用的xml文件配置menu的方式,当 然也有其他方法,这里当然讲最简单易懂的方法。 res/menu/ 目录专门用来配置 menu的资源文件夹,放在menu/目录下的xml文件都将作为菜单资源被引用,根节点是menu,里面的项目有item 和 group 两种,顾名思义吧,你懂的。
配置:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/about"
android:title="关于"/>
<item
android:id="@+id/out"
android:title="退出"/>
<group android:id="@+id/group1" >
<item
android:id="@+id/item1"
android:title="item1">
</item>
<item
android:id="@+id/item2"
android:title="item2">
</item>
<item
android:id="@+id/item2"
android:title="item2">
</item>
</group>
</menu>
Activity中实例化menu,直接重写Activity的 onCreateOptionsMenu,然后使用 MenuInflater 加载 我们menu目录下的 main.xml 文件作为菜单:
//创建menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater= getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
监听事件,这就很简单,当某一项被选中时执行,这里通过 item.getItemId() 返回 android:id 来判断是那一项被选中。
//menu的按键事件
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
switch(itemId){
case R.id.item1:
showToast("item1");
break;
case R.id.item2:
showToast("item2");
break;
case R.id.about:
showToast("about");
break;
case R.id.out:
finish();
break;
}
return super.onMenuItemSelected(featureId, item);
}
private void showToast(String content){
Toast.makeText(mCtx, content, Toast.LENGTH_SHORT).show();
}
Dialog:
这个实例中有两个Dialog,第一个是系统样式的,第二个使我们添加过view自定义的,其实这里自定义dialog和系统样式的区别在于就是添加了一个View,当然也可以修改Dialog的其他样式,不在这里讲解,我们直接来看自定义的Dialog:
Dialog中添加的View, res/layout/dialog.xml (这里又是登陆界面):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账号:"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_username"
android:autoText="true"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_password"
android:autoText="true"
/>
</LinearLayout>
重点来看怎么初始化Dialog的:
LayoutInflater inflater = LayoutInflater.from(mCtx);
View dialogView = inflater.inflate(R.layout.dialog, null);
AlertDialog dlg = new AlertDialog.Builder(mCtx)
.setTitle("登陆框")
.setView(dialogView)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mProgressDialog = new ProgressDialog(mCtx);
mProgressDialog.setTitle("登陆中");
mProgressDialog.setMessage("请稍后..");
mProgressDialog.setCancelable(true);
mProgressDialog.show();
new Thread() {
@Override
public void run() {
try{
sleep(10000);
} catch(Exception e){
e.printStackTrace();
} finally{
mProgressDialog.dismiss();
}
}
}.start();
}
})
.setNegativeButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
})
.create();
dlg.show();
Inflater 找了一下英文翻译,姑且把它叫做 填充器吧, 我认为Inflater的作用就和他的名字一样,是把 layout, menu 等xml的配置文件填充到 View当中,然后我们再将View显示出来。
LayoutInflater inflater = LayoutInflater.from(mCtx);
View dialogView = inflater.inflate(R.layout.dialog, null);
第一行是构造 LayoutInflater, 然后第二步用 inflater 将 dialog.xml 填充到View中, inflate(R.layout.dialog, null),第二个参数是root,就是我们上一级布局的意思,我们这里传为null。
AlertDialog dlg = new AlertDialog.Builder(mCtx)
.setTitle("登陆框")
.setView(dialogView)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
})
.setNegativeButton("退出", new DialogInterface.OnClickListener() {
})
.create();
这里我把监听事件的部分删掉了,一目了然,我们使用AlertDialog.Buider 来创建Dialog,当调用create() 方法后,返回值为一个 AlertDialog。里面有一个set方法,就是设置对话框的参数,其中最重要的是 setView() 添加我们自己够着的view。setTitle() 设置对话框的标题, setPositivebutton 和 setNegativeButton 就是添加确定和取消按钮,第二个参数是监听事件:DialogInterface.OnClickListener,点击按钮时触发,很简单。
最后我们看点击事件里面我们做了什么:
mProgressDialog = new ProgressDialog(mCtx);
mProgressDialog.setTitle("登陆中");
mProgressDialog.setMessage("请稍后..");
mProgressDialog.setCancelable(true);
mProgressDialog.show();
new Thread() {
@Override
public void run() {
try{
sleep(10000);
} catch(Exception e){
e.printStackTrace();
} finally{
mProgressDialog.dismiss();
}
}
}.start();
ProgressDialog 是系统内置的带有圆形进度条的对话框,当调用show()方法后会显示在屏幕中间,运行效果参看实例。然后我们启动了一个线 程,sleep(10*1000) 10秒后关掉进图条Dialog。当然在真实开发中应该是做完操作之后,发送消息关闭进度条,以后再做实例。
好了,今天就写到这里!
来源: <http://write.blog.csdn.net/postedit>