解决android.content.res.Resources NotFoundException的一个方法

android开发中会用一些资源,这些资源以不同形式存在,比如说图片,xml等,android为这些不同类型的资源统一编号,生成资源类R 。如下: public final class R { public static final class anim { public static final int popup_enter=0x7f040000; public static final int popup_exit=0x7f040001; } public static final class drawable { public static final int gradient_bg=0x7f020000; public static final int icon=0x7f020001; } public static final class layout { public static final int city_item=0x7f030000; } } 在编译器编译程序时可以找到的资源,但在运行时却找不到,会出现如下异常: 12-14 01:40:58.452: WARN/AppWidgetHostView(627): android.content.res.Resources$NotFoundException: Resource ID #0x7f030000 出现此类异常时,可以根据 Resource ID到资源类R中找相关的资源。比如0x7f030000,对应的是city_item布局文件,就可以将问题缩小到更小的范围。对于这类运行时找不到资源,但资源又确实存在的问题,可能的编译打包时出现问题,没有将该资源加入。可修改一下该资源,让编译器重新编译。 引用一下其他网友的解决方案: 1、 今天遇到类似这样问题,后来在找到解决方案,把AndroidManifest.xml里面的版本改为8(我原来的是10),问题解决了,原因是这样的:主要是原来的那个工程占用现在的这个虚拟机,不能正常加载现在的这个工程. 把原来的那个工程移除掉,把原来的工程的androidmanifest.xml文件考到现在的这个工程就可以了,不改版本号也可以运行。。自己尝试一下会感悟很多的 再有就是点击Project ->Clean一下这个项目 也可以的。 2、 ERROR/AndroidRuntime(279): android.content.res.Resources $NotFoundException: String resource ID #0x7f050008 解决方案: 可能存在的问题是eclipse缓存影响了现有项目的运行,清除一下缓存即可以了。。。 3、android.content.res.Resources$NotFoundException 今天编程时遇到了这种异常产生异常的代码如 下:distanceChoiceView.setText(PreferenceStoreData.getIntByKey(AroundActivity.this, FinalConst.arroudDistance, 500));产生原因在于 TextView.setText(value) ,其中value必须是String 类型的。而我上面赋值的时Int 类型,所以出错。解决方 法:distanceChoiceView.setText(“”+PreferenceStoreData.getIntByKey(AroundActivity.this, FinalConst.arroudDistance, 500)); 源自:http://blog.3gstdy.com/

Android中如何自定义Menu菜单

我们又如何来自定义Menu呢?下面我就主要来讲讲如何在Android上自定义Menu菜单,希望对大家有所帮助。 用过UCWEB-Android版的人都应该对其特殊的menu有印象,把menu做成Tab-Menu(支持分页的Menu),可以容纳比 Android传统的menu更丰富的内容(Android的menu超过6项则缩略在[更多]里),本文参考网上的例子(作 者:CoffeeCole,email:longkefan@foxmail.com),对例子进行简化以及封装,使其作为一个复合控件融入自己的 framework。 先来看看本文程序运行的效果: TabMenu 本身就是一个PopupWindow,PopupWindow上面放了两个GridView,第一个GridView就是分页标签,位于 PopupWindow的顶部,第二个GridView是菜单,位于PopupWindow的主体。为了实现PopupWindow的弹出/退出的动画效 果,本文使用了以下代码: 在工程的res文件夹里添加anim子目录,再新建文件popup_enter.xml:

1

2

3

4

5

<?`xmlversion=“1.0”encoding=“utf-8”?>`

<`setxmlns:android=http://schemas.android.com/apk/res/android>`

<`translateandroid:fromYDelta=“100%p”android:toYDelta=“0”android:duration=“1000”/>`

<`alphaandroid:fromAlpha=“0.0”android:toAlpha=“1.0”android:duration=“1000”/>`

</`set>`

新建文件popup_exit.xml:

1

2

3

4

5

<?`xmlversion=“1.0”encoding=“utf-8”?>`

<`setxmlns:android=http://schemas.android.com/apk/res/android>`

<`translateandroid:fromYDelta=“0”android:toYDelta=“100%p”android:duration=“1000”/>`

<`alphaandroid:fromAlpha=“1.0”android:toAlpha=“0.0”android:duration=“1000”/>`

</`set>`

在工程的values文件夹里新建文件popup_animation.xml:

1

2

3

4

5

6

7

<?`xmlversion=“1.0”encoding=“utf-8”?>`

<`resources>`

<`stylename=“PopupAnimation”parent=“android:Animation”>`

<`itemname=“android:windowEnterAnimation”>@anim/popup_enter</item>`

<`itemname=“android:windowExitAnimation”>@anim/popup_exit</item>`

</`style>`

</`resources>`

main.xml的源码如下:

1

2

3

4

5

6

7

<?`xmlversion=“1.0”encoding=“utf-8”?>`

<`LinearLayoutandroid:id=“@+id/LinearLayout01”`

android:layout_width`="fill_parent"` `android:layout_height=“fill_parent”`

xmlns:android`="[http://schemas.android.com/apk/res/android](http://schemas.android.com/apk/res/android)">`

<`TextViewandroid:id=“@+id/TextView01”android:layout_height=“wrap_content”`

android:layout_width`="fill_parent"` `android:text="扩展Menu----hellogv"></TextView>`

</`LinearLayout>`

TabMenu的封装类TabMenu.java的源码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

package com.testTabMenu;

import android.content.Context;

import android.graphics.Color;

import android.graphics.drawable.ColorDrawable;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

import android.widget.TextView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.LinearLayout.LayoutParams;

public class TabMenu extends PopupWindow{

private GridView gvBody, gvTitle;

private LinearLayout mLayout;

private MenuTitleAdapter titleAdapter;

public TabMenu(Context context,OnItemClickListener titleClick,OnItemClickListener bodyClick,

MenuTitleAdapter titleAdapter,`intcolorBgTabMenu,intaniTabMenu){`

super`(context);`

mLayout = new LinearLayout(context);

mLayout.setOrientation(LinearLayout.VERTICAL);

//标题选项栏

gvTitle = new GridView(context);

gvTitle.setLayoutParams(`newLayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));`

gvTitle.setNumColumns(titleAdapter.getCount());

gvTitle.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);

gvTitle.setVerticalSpacing(`1);`

gvTitle.setHorizontalSpacing(`1);`

gvTitle.setGravity(Gravity.CENTER);

gvTitle.setOnItemClickListener(titleClick);

gvTitle.setAdapter(titleAdapter);

gvTitle.setSelector(`newColorDrawable(Color.TRANSPARENT));//选中的时候为透明色`

this`.titleAdapter=titleAdapter;`

//子选项栏

gvBody = new GridView(context);

gvBody.setLayoutParams(`newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));`

gvBody.setSelector(`newColorDrawable(Color.TRANSPARENT));//选中的时候为透明色`

gvBody.setNumColumns(`4);`

gvBody.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);

gvBody.setVerticalSpacing(`10);`

gvBody.setHorizontalSpacing(`10);`

gvBody.setPadding(`10,` `10,10,` `10);`

gvBody.setGravity(Gravity.CENTER);

gvBody.setOnItemClickListener(bodyClick);

mLayout.addView(gvTitle);

mLayout.addView(gvBody);

//设置默认项

this`.setContentView(mLayout);`

this`.setWidth(LayoutParams.FILL_PARENT);`

this`.setHeight(LayoutParams.WRAP_CONTENT);`

this`.setBackgroundDrawable(new` `ColorDrawable(colorBgTabMenu));// 设置TabMenu菜单背景`

this`.setAnimationStyle(aniTabMenu);`

this`.setFocusable(true);// menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应`

}

public void SetTitleSelect(`intindex)`

{

gvTitle.setSelection(index);

this`.titleAdapter.SetFocus(index);`

}

public void SetBodySelect(`intindex,intcolorSelBody)`

{

int count=gvBody.getChildCount();

for`(int` `i=0;i<count;i++)`

{

if`(i!=index)`

((LinearLayout)gvBody.getChildAt(i)).setBackgroundColor(Color.TRANSPARENT);

}

((LinearLayout)gvBody.getChildAt(index)).setBackgroundColor(colorSelBody);

}

public void SetBodyAdapter(MenuBodyAdapter bodyAdapter)

{

gvBody.setAdapter(bodyAdapter);

}

/**

* 自定义Adapter,TabMenu的每个分页的主体

*

*/

static public class MenuBodyAdapter extends BaseAdapter {

private Context mContext;

private int fontColor,fontSize;

private String[] texts;

private int`[] resID;`

/**

* 设置TabMenu的分页主体

* @param context 调用方的上下文

* @param texts 按钮集合的字符串数组

* @param resID 按钮集合的图标资源数组

* @param fontSize 按钮字体大小

* @param color 按钮字体颜色

*/

public MenuBodyAdapter(Context context, String[] texts,`int[] resID,` `int` `fontSize,intfontColor)`

{

this`.mContext = context;`

this`.fontColor = fontColor;`

this`.texts = texts;`

this`.fontSize=fontSize;`

this`.resID=resID;`

}

public int getCount() {

return texts.length;

}

public Object getItem(`intposition) {`

return makeMenyBody(position);

}

public long getItemId(`intposition) {`

return position;

}

private LinearLayout makeMenyBody(`intposition)`

{

LinearLayout result=`newLinearLayout(this.mContext);`

result.setOrientation(LinearLayout.VERTICAL);

result.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);

result.setPadding(`10,` `10,10,` `10);`

TextView text = new TextView(`this.mContext);`

text.setText(texts[position]);

text.setTextSize(fontSize);

text.setTextColor(fontColor);

text.setGravity(Gravity.CENTER);

text.setPadding(`5,` `5,5,` `5);`

ImageView img=`newImageView(this.mContext);`

img.setBackgroundResource(resID[position]);

result.addView(img,`newLinearLayout.LayoutParams(newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)));`

result.addView(text);

return result;

}

public View getView(`intposition, View convertView, ViewGroup parent) {`

return makeMenyBody(position);

}

}

/**

* 自定义Adapter,TabMenu的分页标签部分

*

*/

static public class MenuTitleAdapter extends BaseAdapter {

private Context mContext;

private int fontColor,unselcolor,selcolor;

private TextView[] title;

/**

* 设置TabMenu的title

* @param context 调用方的上下文

* @param titles 分页标签的字符串数组

* @param fontSize 字体大小

* @param fontcolor 字体颜色

* @param unselcolor 未选中项的背景色

* @param selcolor 选中项的背景色

*/

public MenuTitleAdapter(Context context, String[] titles, int fontSize,

int fontcolor,`intunselcolor,intselcolor) {`

this`.mContext = context;`

this`.fontColor = fontcolor;`

this`.unselcolor = unselcolor;`

this`.selcolor=selcolor;`

this`.title =newTextView[titles.length];`

for (`inti =0; i < titles.length; i++) {`

title[i] = new TextView(mContext);

title[i].setText(titles[i]);

title[i].setTextSize(fontSize);

title[i].setTextColor(fontColor);

title[i].setGravity(Gravity.CENTER);

title[i].setPadding(`10,` `10,10,` `10);`

}

}

public int getCount() {

return title.length;

}

public Object getItem(`intposition) {`

return title[position];

}

public long getItemId(`intposition) {`

return title[position].getId();

}

/**

* 设置选中的效果

*/

private void SetFocus(`intindex)`

{

for`(int` `i=0;i<title.length;i++)`

{

if`(i!=index)`

{

title[i].setBackgroundDrawable(`newColorDrawable(unselcolor));//设置没选中的颜色`

title[i].setTextColor(fontColor);`//设置没选中项的字体颜色`

}

}

title[index].setBackgroundColor(`0x00);//设置选中项的颜色`

title[index].setTextColor(selcolor);`//设置选中项的字体颜色`

}

public View getView(`intposition, View convertView, ViewGroup parent) {`

View v;

if (convertView == null`) {`

v = title[position];

} else {

v = convertView;

}

return v;

}

}

}

testTabMenu介绍了数据的定义以及TabMenu的使用,源码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

package com.testTabMenu;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Gravity;

import android.view.Menu;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.Toast;

public class testTabMenu extends Activity {

TabMenu.MenuBodyAdapter []bodyAdapter=`newTabMenu.MenuBodyAdapter[3];`

TabMenu.MenuTitleAdapter titleAdapter;

TabMenu tabMenu;

int selTitle=`0;`

@Override

public void onCreate(Bundle savedInstanceState) {

super`.onCreate(savedInstanceState);`

setContentView(R.layout.main);

//设置分页栏的标题

titleAdapter = new TabMenu.MenuTitleAdapter(`this,` `new` `String[] {` `"常用",`

"设置"`,“工具”},16,` `0xFF222222,Color.LTGRAY,Color.WHITE);`

//定义每项分页栏的内容

bodyAdapter[`0]=newTabMenu.MenuBodyAdapter(this,new` `String[] {` `"常用1",“常用2”, },`

new int`[] { R.drawable.menu_test,`

R.drawable.menu_bookmark},`13,` `0xFFFFFFFF);`

bodyAdapter[`1]=newTabMenu.MenuBodyAdapter(this,new` `String[] {` `"设置1",“设置2”,`

"设置3"`},newint[] { R.drawable.menu_edit,`

R.drawable.menu_delete, R.drawable.menu_fullscreen},`13,` `0xFFFFFFFF);`

bodyAdapter[`2]=newTabMenu.MenuBodyAdapter(this,new` `String[] {` `"工具1",“工具2”,`

"工具3"`,“工具4”},newint[] { R.drawable.menu_copy,`

R.drawable.menu_cut, R.drawable.menu_normalmode,

R.drawable.menu_quit },`13,` `0xFFFFFFFF);`

tabMenu=`newTabMenu(this,`

new TitleClickEvent(),

new BodyClickEvent(),

titleAdapter,

0x55123456`,//TabMenu的背景颜色`

R.style.PopupAnimation);`//出现与消失的动画`

tabMenu.update();

tabMenu.SetTitleSelect(`0);`

tabMenu.SetBodyAdapter(bodyAdapter[`0]);`

}

class TitleClickEvent implements OnItemClickListener{

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

selTitle=arg2;

tabMenu.SetTitleSelect(arg2);

tabMenu.SetBodyAdapter(bodyAdapter[arg2]);

}

}

class BodyClickEvent implements OnItemClickListener{

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

tabMenu.SetBodySelect(arg2,Color.GRAY);

String str=`“第”+String.valueOf(selTitle)+“栏/n/r”`

+`“第”+String.valueOf(arg2)+“项”;`

Toast.makeText(testTabMenu.`this, str,` `500).show();`

}

}

@Override

/**

* 创建MENU

*/

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(`“menu”);// 必须创建一项`

return super`.onCreateOptionsMenu(menu);`

}

@Override

/**

* 拦截MENU

*/

public boolean onMenuOpened(`intfeatureId, Menu menu) {`

if (tabMenu != null`) {`

if (tabMenu.isShowing())

tabMenu.dismiss();

else {

tabMenu.showAtLocation(findViewById(R.id.LinearLayout01),

Gravity.BOTTOM, 0`,0);`

}

}

return false`;// 返回为true 则显示系统menu`

}

}

这样,我们就基本实现了Android自定义Menu菜单的功能,谢谢阅读!

高版本apk运行在android 1.5上出现的问题及解决方法

当采用高版本SDK开发的Android应用,更换成1.5的SDK后会出现如下错误,说是一些资源文件找不到。但这个资源文件又是你程序中从来没有用到的。 java.io.FileNotFoundException: res/drawable/title_bar_shadow.9.png Caused by: android.content.res.Resources$NotFoundException: File res/drawable/title_bar_shadow.9.png from drawable resource ID #0x7f020001 Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class java.lang.reflect.Constructor 经查发现,是sdk1.5版本和高版本的sdk创建的工程的目录结构不同,高版本的考虑到不同分辨率,所以有drawable-ldpi, drawable-mdpi, drawable-hdpi。而sdk1.5及以下没有种结构。只的drawable一个文件夹。用SDK1.5有时可以编辑通过高版本sdk创建的应用工程,但在1.5的机器上运行时不能从指定的drawable中找到相关资源所以不能运行。 知道问题所在后解决就很容易了,在工程中加上drawable资源文件夹,将drawable-ldpi, drawable-mdpi, drawable-hdpi中的相应资源加入到drawable中,再次编译就可以运行了。 参考:http://codinganswers.info/index.php/2011/07/exception-while-running-my-app-targetsdk-2-2-api-level-8-running-on-1-5-api-level-3/

采用XMPP协议向android客户端推送消息

XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。 androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。经过源代码研究我发现,该服务器端基本是在另外一个开源工程openfire基础上修改实现的,不过比较郁闷的是androidpn的文档是由韩语写的,所以整个研究过程基本都是读源码。它的实现示意图如下: androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,可以直接把androidpn客户端里面的asmack.jar拿来使用。客户端利用asmack中提供的XMPPConnection类与服务器建立持久连接,并通过该连接进行用户注册和登录认证,同样也是通过这条连接,接收服务器发送的通知。 androidpn服务器端也是java语言实现的,基于openfire开源工程,不过它的Web部分采用的是spring框架,这一点与openfire是不同的。Androidpn服务器包含两个部分,一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。服务器架构如下: 最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。SessionManager负责管理客户端与服务器之间的会话,Auth Manager负责客户端用户认证管理,Presence Manager负责管理客户端用户的登录状态,NotificationManager负责实现服务器向客户端推送消息功能。 服务器端界面如下,分别对应了上述的几个功能模块: 发送以后,我们可以在手机端看到接收的消息: 这个解决方案的最大优势就是简单,我们不需要象C2DM那样依赖操作系统版本,也不会担心某一天Google服务器不可用。利用XMPP协议我们还可以进一步的对协议进行扩展,实现更为完善的功能。 采用这个方案,我们目前只能发送文字消息,不过对于推送来说一般足够了,因为我们不能指望通过推送得到所有的数据,一般情况下,利用推送只是告诉手机端服务器发生了某些改变,当客户端收到通知以后,应该主动到服务器获取最新的数据,这样才是推送服务的完整实现。 相关资料:

谷歌Android如何从云端推送消息到手机

How to Implement Push Notifications for Android

2007年的学习计划

2007年的学习计划 1、系统学习oracle,熟悉oracle的基本概念,安全性,达到熟练数据库的创建,开启,关闭,备份,恢复,管理日志,创建管理模式对象。 2、学习structs hibernete,spring.达到能创建简单的工程待以后工作中应用再提高。如果时间充裕可以理解这些框架的工作机理。 3、学习工作流,能设计实现简单的工作流。 4、学习xml的相关知识。熟悉xml的基本语法。掌握如何使用java dom读写一个xml文件。// 5、系统学习tomcat的server.xml配置。如:端口,性能优化,集群配置。 6、学习双机配置的相关知识。如果由模拟器的话最好能够创建一个双机。 7、系统学习weblogic的相关知识。 8、学习linux的相关知识。达到熟练应用该操作系统的基本操作的地步。安装系统,安装运行卸载应用程序,启动关闭服务, 9、学习Websphere,能熟练安装该软件,并能掌握基本的操作,如发布web应用,开启,关闭服务,配置数据源等。 10、学习java的反射机制。 11、学习数据库的设计知识。 12、系统学习eclipse的功能,如调试功能,各个视图的功能,如何安装插件,以及插件是如何工作的。以便今后工作中快速开放项目。达到熟练应用的程度。 13、系统学习javascript,css,ajax的知识。 14、学习java mail邮件 15、学习lotus的基本知识。能大概理解lotus的工作方式,以及domino数据库的工作方式,和传统数据库的区别。 16、学习lunce的开放包,熟悉主要的类的功能。 17、学习常用技术文档的基本格式,编写方法。 18、学习jsp中标签的应用方法,基本工作原理。 19、学习java窗口程序的开发方法。能创建基本的窗口程序。 20、学习报表的相关知识。(jreport) 21、学习java编程模式的知识。 22、学习jsp中的7大对象的知识,掌握各个对象的基本用法。和Bean在jsp页面中的应用。 23、学习ant工具的使用方法及其在实际应用中的作用。 24、了解ejb的工作原理。 25、Web Services-跨语言的通讯平台 26、软件工程与项目监控 27、项目进度

两个SQL语句,性能相差如此大

用Hibernate开发的应用,使用是Oracle10g,使用的方言是org.hibernate.dialect.OracleDialect 数据到达360W的时候,分页查询比较慢,达到10S多,分析了自动生成的SQL,发现SQL格式如下: SELECT FROM (SELECT row_., ROWNUM rownum_ FROM (SELECT users.id,users.name FROM my.users users0_) row_) WHERE rownum_ <= 100 AND rownum_ > 10 将方言改为org.hibernate.dialect.Oracle10gDi生成的SQL是 SELECT FROM (SELECT row_., ROWNUM rownum_ FROM (SELECT users.id,users.name FROM my.users users0_) row_ where rownum <= 100 ) WHERE rownum_ > 10。 速度很快。

页面设计中的几个规范

1、高级查询与简单查询:如是列表中存在高级查询和简单查询时,简单查询一般只用一个文本框,以突出其简单快速的特性;高级查询应该采用链接的形式,以表明要转到另外一个页面,如baidu中的“高级”链接,google中的” 高级搜索”链接。 2、按钮的使用:系统中一般如果存在与数据库交互的应该使用按钮,如增加,修改,删除等。对于页面的跳转一般采用链接的形式。如转到增加页面。转修改页面等; 3、系统分析设计中尽量少用或不用“信息”,“管理”等字样,这些词一般概括性较强,但不具体,不适合用于这些场合 4、用例的名称一般采用动词+名词的形式命名