我的目的是开发web apps,用WebView的形式,让b/s结构的oa、表单、crm等系统在安卓手机上运行。WebView就是一个手机浏览器,这样我们只需要对现有的web系统做简单的改造就可以实现手机app应用。
这个开发过程用到的要点:新建android application project;调整menu item;使用intent打开一个activity;EditText和button的使用;关于APP已停止运行的提示;使用SharedPreferences实现简单的读写;使用WebView访问网页;完成效果展示。
我用的开发工具是Eclipse(ADT V22.6.2),测试环境是vm下的android-x86-4.0-r1-thinkpad.iso。不同的环境下情况可能会不一样。
新建android application project
New – android application project—项目名称oaApp2—对应的SDK我都采用4.0—next—next—在Configure Launcher Icon里我选择了自己的图片—其他的默认保存。
完成项目后的主要文件路径:
src/…/MainActivity.java java代码
res/layout/fragment_main.xml 布局界面文件
res/menu/main.xml 菜单文件(右上角)
res/values/strings.xml 显示的文字,可实现多语言,我将app_name修改为“数飞OA 手机APP”。
res/AndroidMainfest.xml manifest file
调整menu item
建立项目后,我首先调整了menu item(右上角的菜单),最终有“刷新”和“设置”这两个菜单项。
(一)、增加图标:new – other – android – android icon set-在Choose Icon Set Type这里选择Menu Icons,名称为ic_menu_set – 在 Configure Icon Set这里,text输入“设置”,font选择“微软雅黑”,完成。完成后res/drawable-hdpi等文件夹下多了ic_menu_set.png图片。
(二)、修改menu/main.xml:打开main.xml后默认有个item,修改默认的id值,将showAsAction改为ifRoom,增加android:icon。修改后如下:
<item
android:id="@+id/action_settings1"
android:icon="@drawable/ic_menu_set"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action_settings"/>
(三)、修改src下MainActivity.java的onOptionsItemSelected方法,将默认的action_settings修改为action_settings1。菜单触发就在这个方法下实现。
(四)、“刷新”菜单按以上步骤增加,id设置为action_load
使用intent打开一个activity
“设置”菜单的作用是打开一个activity。
(一)、新建activity,new – other – android – android activity – next – next – activity name修改为setActivity-Hierarchical parent选择为com.example.oaapp2.MainActivity
(二)、完成后在fragment_set上增加一个Plain Text和一个button
(三)、在MainActivity.java:onOptionsItemSelected方法中实现代码:
if (id == R.id.action_settings1) {
Intent intent = new Intent(this, SetActivity.class);
startActivity(intent);
return true;
}
(四)、eclipse中的小技巧:当复制代码到eclipse中,相关的类没有import的话会报错,使用快捷健ctrl + shift + o实现自动import。这个很好用。
EditText和button使用
增加button的onClick方法,设置editText的值,获取editText的值。
(一)、为了好识别,在fragment_set.xml中id分别修改为editTextUrl, buttonSet
(二)、在fragment_set.xml中buttonSet增加android:onClick="buttonSetClick",其中buttonSetClick是自己增加的函数名称
(三)、在SetActivity.java中增加buttonSetClick函数
public void buttonSetClick (View
view) {}
(四)、在buttonSetClick里增加代码,获取EditText的值
View rootView = (View)view.getParent();
EditText editTextUrl = (EditText)rootView.findViewById(R.id.editTextUrl);
String sUrl = editTextUrl.getText().toString();
关于APP已停止运行的提示
刚开始写android app的时候,经常遇到“已停止运行”的提示,调试的时候发现null,那怕跟着developer.android的training一步步增加代码,也会这样。
一种情况是activity_main.xml和fragment_set.xml的问题。在SetActivity.java或MainActivity.java里直接用findViewById来获取fragment里的EditText,就肯定是null,用null去获取值在运行时肯定出现“停止运行”的提示。因此我在buttonSetClick里先用view.getParent()来获取EditText的上级。
一种情况是函数名称写错了。比如在xml中定义了android:onClick="buttonSetClick",在
MainActivity.java中这个函数名不存在,在运行时一点击这个按纽就会出现“停止运行”。
使用SharedPreferences实现简单的读写
我已拥有一个editText可以修改默认的网址,这个网址要保存,最简单的方法就是用SharedPreferences。
(一)、在buttonSetClick后继续增加代码,实现保存输入的网址
SharedPreferences sharedPref = this.getSharedPreferences("oaapp", Context.MODE_PRIVATE);
Editor editor = sharedPref.edit();
editor.putString("url", sUrl);
editor.commit();
(二)、在PlaceholderFragment的onCreateView里增加代码,实现editText自动显示保存的网址
使用WebView访问网页
(一)打开res/layout/fragment_main.xml,去掉默认的hello text,从Composite里拉入WebView,并拉到最大。Id默认为webView1。
(二)在MainActivity.java的PlaceholderFragment里修改onCreateView方法:
(三)在res/AndroidManifest.xml中设置权限。这个uses-permission跟application
平级,追加到</application>后。
<uses-permission android:name="android.permission.INTERNET"/>
(四)、增加“刷新”菜单的代码:读取已设置的url,在webview中显示。
在MainActivity中先定义一个全局Fragment fragment = null;
修改onCreate方法:
if (savedInstanceState == null) {
fragment = new PlaceholderFragment();
getFragmentManager().beginTransaction()
.add(R.id.container, fragment).commit();
}
修改onOptionsItemSelected方法:
完成后的效果:
(一)访问网页
(二)设置要访问的网页