Android应用开发揭秘(笔记) 第四章用户界面开发(第二部分)
来源:互联网 发布:互助系统php源代码 编辑:程序博客网 时间:2024/05/18 16:17
11.菜单(Menu):
实现方法:首先通过方法onCreateOptionsMenu来创建菜单,然后需要对其能够出家的事件进行监听,通过事件监听onOptionsItemSelected中不同
的菜单项来执行不同操作。可以通过xml布局实现,也可以通过menu.add方法来实现。
△ 通过xml布局实现:首先在项目目录的"res"创建一个menu文件夹,然后再其中创建需要的菜单,然后再onCreateOptionsMenu方法中通过onCreateOptionsMenu方法
来装载这个布局文件。在onOptionsItemSelected监听方法中通过getItemId方法获得当前选中的菜单的“ID”。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/about"
android:title="关于" />
<item android:id="@+id/exit"
android:title="退出" />
</menu>
代码如下:
/*创建menu*/
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
//设置menu界面为res/menu/menu.xml
inflater.inflate(R.menu.menu, menu);
return true;
}
/*处理菜单事件*/
public boolean onOptionsItemSelected(MenuItem item)
{
//得到当前选中的MenuItem的ID,
int item_id = item.getItemId();
switch (item_id)
{
case R.id.about:
/* 新建一个Intent对象 */
Intent intent = new Intent();
/* 指定intent要启动的类 */
intent.setClass(Activity01.this, Activity02.class);
/* 启动一个新的Activity */
startActivity(intent);
/* 关闭当前的Activity */
Activity01.this.finish();
break;
case R.id.exit:
Activity01.this.finish();
break;
}
return true;
}
△ 通过menu.add方法来实现:即在onCreateOptionsMenu方法中通过“menu.add(0,)”
/*创建menu*/
public boolean onCreateOptionsMenu(Menu menu)
{
//为menu添加内容
menu.add(0, 0, 0, R.string.ok);
menu.add(0, 1, 1, R.string.back);
return true;
}
/*处理menu的事件*/
public boolean onOptionsItemSelected(MenuItem item)
{
//得到当前选中的MenuItem的ID,
int item_id = item.getItemId();
switch (item_id)
{
case 0:
case 1:
/* 新建一个Intent对象 */
Intent intent = new Intent();
/* 指定intent要启动的类 */
intent.setClass(Activity02.this, Activity01.class);
/* 启动一个新的Activity */
startActivity(intent);
/* 关闭当前的Activity */
Activity02.this.finish();
break;
}
return true;
}
12 对话框(Dialog):Android中实现可以使用AlertDialog.Builder类,还可以自定义对话框。如果对话框设置了按钮,就需要设置事件监听onClickListener。
xml中:android:textAppearance="?android:attr/textAppearanceMedium",布局里设置文字的外观。
13图片视图(ImageView):在屏幕上显示一张图片。通过setImageResources方法来设置要显示的图片资源索引。
xml布局:
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageView>
代码实现:
//获得ImageView的对象
ImageView imageview = (ImageView) this.findViewById(R.id.ImageView01);
//设置imageview的图片资源。同样可以再xml布局中像下面这样写
//android:src="@drawable/logo"
imageview.setImageResource(R.drawable.logo);
//设置imageview的Alpha值
imageview.setAlpha(image_alpha);
14带图标的按钮(ImageButton):
实现方法:首先定布局文件中定义ImageButton,然后通过setImageDrawable方法来设置要显示的按钮图标。同样通过设置事件监听setOnClickListener。
xml布局:
<ImageButton
android:id="@+id/ImageButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//android:src="@drawable/button1"
>
</ImageButton>
代码实现:ImageButton imagebutton1 = (ImageButton)findViewById(R.id.ImageButton01);
imagebutton1.setImageDrawable(getResources().getDrawable(R.drawable.button1 ) );
imagebutton1.setOnClickListener( new Button.OnClickListener(){
public void onClick( View view ){
//do someting...
}
});
15.拖动效果(Gallery):
实现方法:需要一个容器存放Gallery显示图片,使用一个继承自BaseAdapter类的派生类来装这些图片。通过监听事件setOnItemClickListener,得到选中的是哪一张图片。
还需要将所有图片的索引存放在一个int型数组中,然后通过setImageResources方法来设置ImageView显示图片,将每张ImageView显示在屏幕上。
Gallery xml布局:
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Gallery01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Gallery代码实现:
//获得Gallery对象
Gallery g = (Gallery) findViewById(R.id.Gallery01);
//添加ImageAdapter给Gallery对象
g.setAdapter(new ImageAdapter(this));
//设置Gallery的背景
g.setBackgroundResource(R.drawable.bg0);
//设置Gallery的事件监听
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(Activity01.this,"你选择了"+(position+1)+" 号图片",
Toast.LENGTH_SHORT).show();
}
});
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class ImageAdapter extends BaseAdapter
{
// 定义Context
private Context mContext;
// 定义整型数组 即图片源
private Integer[] mImageIds =
{
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img6,
R.drawable.img7,
R.drawable.img8,
};
// 声明 ImageAdapter
public ImageAdapter(Context c)
{
mContext = c;
}
// 获取图片的个数
public int getCount()
{
return mImageIds.length;
}
// 获取图片在库中的位置
public Object getItem(int position)
{
return position;
}
// 获取图片ID
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView imageview = new ImageView(mContext);
// 给ImageView设置资源
imageview.setImageResource(mImageIds[position]);
// 设置布局 图片120×120显示
imageview.setLayoutParams(new Gallery.LayoutParams(120, 120));
// 设置显示比例类型
imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageview;
}
}
16.切换图片(ImageSwitcher):
实现方法:ImageSwitcher类必须设置一个ViewSwitcher.ViewFactory,通过makeView()方法用来显示图片和父窗口区分开来。makeView()会返回一个ImageView
对象,通过setImageResouces来显示指定的图片资源。
代码实现部分:
Activity实现了(implements)ViewFactory类
//创建一个线性布局LinearLayout
LinearLayout main_view = new LinearLayout(this);
//创建ImageSwitcher对象
m_Switcher = new ImageSwitcher(this);
//在线性布局中添加ImageSwitcher视图
main_view.addView(m_Switcher);
//设置ImageSwitcher对象的ID
m_Switcher.setId(SWITCHER_ID);
//设置ImageSwitcher对象的数据源
m_Switcher.setFactory(this);
//index通过button 来改变这个索引值
m_Switcher.setImageResource(imagelist[index]);
//设置显示上面创建的线性布局
setContentView(main_view);
public View makeView()
{
//将所有图片通过ImageView来显示
return new ImageView(this);
}
17.网络视图(GridView):显示多个元素。
实现方法:首先使用BaseAdapter来存储这些元素。通过事件监听setOnItemClickListener来捕捉事件。
GridView xml布局:
GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
定义一个ImageAdapter继承BaseAdapter,该类与Gallery中的ImageAdapter类似。
Activity部分代码:
//取得GridView对象
GridView gridview = (GridView) findViewById(R.id.gridview);
//添加元素给gridview
gridview.setAdapter(new ImageAdapter(this));
// 设置Gallery的背景
gridview.setBackgroundResource(R.drawable.bg0);
//事件监听
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(Activity01.this, "你选择了" + (position + 1) + " 号图片", Toast.LENGTH_SHORT).show();
}
});
18.卷轴视图(ScrollView):主要用于元素超过一个屏幕,通过使用ScrollView来实现滚动视图。
ScrollView xml布局:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:id="@+id/layout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView0"/>
<Button
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button0"/>
</LinearLayout>
</ScrollView>
代码实现部分:
//创建一个线性布局
LinearLayout mLayout = (LinearLayout) findViewById(R.id.layout);
//创建一个ScrollView对象
ScrollView mScrollView = (ScrollView) findViewById(R.id.ScrollView01);
19.进度条(ProgressBar):Android提供两种进度条,一种是长型进度条(ProgressBarStyleHorizontal),一种是圆形进度条(progressBarStyleLarge)。
progressBar xml布局:
<ProgressBar
android:id="@+id/ProgressBar01"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:visibility="gone"//将对象显示或者隐藏
/>
<ProgressBar
android:id="@+id/ProgressBar02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge"
android:max="100"//最大值
android:progress="50"//当前值
android:secondaryProgress="70"
android:visibility="gone"//将对象显示或者隐藏
/>
代码部分:略
20.拖动条(SeekBar):一般在应用主要用于音效控制。
实现方法:首选需要设置SeekBar.OnSeekBarChangeListener接口。并且还需要监听3个事件,分别是:数值的改变(onProgressChanged)、开始拖动(onStartTrackingTouch)、
停止拖动(onStopTrackingTouch)。
SeekBar xml布局:
<SeekBar android:id="@+id/seek"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"//最大值
android:progress="50"//当前值
android:secondaryProgress="75" />
代码部分:
SeekBar mSeekBar = (SeekBar) findViewById(R.id.seek);
mSeekBar.setOnSeekBarChangeListener(this);
//在拖动中--即值在改变
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)
{
mProgressText.setText("当前值:"+progress);
}
public void onStartTrackingTouch(SeekBar seekBar)
{
mTrackingText.setText("正在调节");
}
//停止拖动
public void onStopTrackingTouch(SeekBar seekBar)
{
mTrackingText.setText("停止调节");
}
21,状态栏提示(Notification、NotificationManager):用于处理一些还未及时处理的信息,例如未接电话和短信。
实现方法:首先通过getSystemService方法得到NotificationManager对象,对Notification的内容。图标、标题等属性进行设置,然后通过notify方法
来执行一个Notification快讯。
代码部分:
//初始化NotificationManager对象
m_NotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//点击通知时转移内容
m_Intent = new Intent(Activity01.this, Activity02.class);
//主要是设置点击通知时显示内容的类
m_PendingIntent = PendingIntent.getActivity(Activity01.this, 0, m_Intent, 0);
//构造Notification对象
m_Notification = new Notification();
m_Button1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
//设置通知在状态栏显示的图标
m_Notification.icon = R.drawable.img1;
//当我们点击通知时显示的内容
m_Notification.tickerText = "Button1通知内容...........";
//通知时发出默认的声音
m_Notification.defaults = Notification.DEFAULT_SOUND;
//设置通知显示的参数
m_Notification.setLatestEventInfo(Activity01.this, "Button1", "Button1通知", m_PendingIntent);
//可以理解为执行这个通知
m_NotificationManager.notify(0, m_Notification);
}
});
22.对话框中的进度条(ProgressDialog):
代码实现部分:
//创建ProgressDialog对象
m_pDialog = new ProgressDialog(Activity01.this);
// 设置进度条风格,风格为圆形,旋转的
m_pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置ProgressDialog 标题
m_pDialog.setTitle("提示");
// 设置ProgressDialog 提示信息
m_pDialog.setMessage("这是一个圆形进度条对话框");
// 设置ProgressDialog 标题图标
m_pDialog.setIcon(R.drawable.img1);
// 设置ProgressDialog 的进度条是否不明确
m_pDialog.setIndeterminate(false);
// 设置ProgressDialog 是否可以按退回按键取消
m_pDialog.setCancelable(true);
// 设置ProgressDialog 的一个Button
m_pDialog.setButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i)
{
//点击“确定按钮”取消对话框
dialog.cancel();
}
});
// 让ProgressDialog显示
m_pDialog.show();
☆界面布局:
常见的布局框架包括:
1.LinearLayer(线性布局)可以垂直线性布局,也可以水平线性布局。可以放多控件,但是一列(一行)只能放一个。
android:orientation="vertical"声明了这个线性布局以垂直的方式排列。
2.RelativeLayout(相对布局)可以放多控件,不过控件的位置是相对的。
RelativeLayout主要参数有:Width,Height,Below,AlignTop,TopLeft,Pading,MarginLeft
Below,AlignTop,TopLeft用来指定相对于其他元素的下、上、左的位置。
3.TableLayout(表单布局)需要和TableRow配合使用。
4.TabWidget(切换卡)。继承自TabActivity,实现标签切换实现显示不同内容的功能。
5.FrameLayout
6.AbsoluteLayout:可以自定义控件的x,y的位置。
小结:
1.本章主要介绍了Android中常用的一些标签,在xml中的布局、以及代码的实现。
2.一些常用标签的事件监听的方法与实现。
3.介绍了Android一些常用的布局例如(LinearLayout、RelativeLayout)。
- Android应用开发揭秘(笔记) 第四章用户界面开发(第二部分)
- Android应用开发揭秘(笔记) 第四章用户界面开发(第一部分)
- Android应用开发揭秘(笔记) 第五章Android游戏开发
- Android应用开发揭秘(笔记) 第九章Android特色开发
- Android应用开发揭秘(笔记) 第七章 多媒体开发
- Android应用开发揭秘学习笔记-优化
- Android应用开发揭秘
- Android应用开发揭秘(笔记) 第三章 程序设计基础
- Android应用开发揭秘(笔记) 第八章网络通信
- Android 应用开发揭秘(笔记) 第一章Android开发简介
- Android应用开发揭秘(笔记) 第十章 Android应用开发实例
- 【Android应用开发技术:用户界面】用户界面基本原理
- Android4开发入门经典 之 第四部分:用户界面
- 书讯:《Android应用开发揭秘》
- Android应用开发揭秘 第一章
- android应用开发揭秘例4-1笔记
- android应用开发揭秘examples_04-08笔记(CheckBox的使用)
- android应用开发揭秘examples_04-12笔记(Button的使用)
- SQL Server 数据库定时自动备份
- Java程序员应该了解的10个面向对象设计原则
- Kona---哥们我来了!(作者系国内业余铁三顶尖爱好者党旗)
- spring3 MVC+jquery+ajax+annotations
- 操作系统中的进程与线程
- Android应用开发揭秘(笔记) 第四章用户界面开发(第二部分)
- HTML5 2D Canvas手机游戏开发经验谈
- c# winform 程序打包部署
- Android中如何查看内存(下)
- 黑莓行货手机是否都有运营商(移动,电信,联通)的logo?
- 关于createwindow的问题,希望得到您的帮助,谢谢
- unoconv 乱码问题
- linux 修改系统时间
- Linux防火墙开启某个端口