1. TextView高亮关键字
可以使用android.text.SpannableStringBuilder 的 setSpan(Object what, int start, int end, int flags) 来实现高亮关键字。
SpannableStringBuild用于经常变动的字符串,SpannableString则用于不变的字符串。例如:
String str="SpannableStringBuilder class";
SpannableStringBuilder sp=new SpannableStringBuilder(str);
sp.setSpan(new ForegroundColorSpan(Color.RED), 1, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //把str的前4个字符的前景色设置为红色
这个类还可以用来完成类似于QQ表情的功能。具体用法参考android api吧。我只用来修改颜色,用正则匹配关键字。可以浏览源代码:KeywordHighlight.java。根据Jota修改而来。
2. Activity界面跳转
界面跳转用到了android.content.Intent。
// MainActivity 中这样写
btn.setOnClickListener(new View.OnClickListener() { // 点击按钮,从MainActivity跳转到ResultActivity
@Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(MainActivity.this,ResultActivity.class);
Bundle bundle = new Bundle(); // 跳转参数传递
bundle.putString("result", res);
intent.putExtras(bundle);
startActivity(intent);
}
});
// ResultActivity 中这样写
Bundle bunde = this.getIntent().getExtras(); // 取参数
String str=bunde.getString("result").toString();
btn.setOnClickListener(new View.OnClickListener(){ // 自定义返回按钮
@Override
public void onClick(View arg0) {
finish(); //停止当前的Activity,返回上一个Activity
}
});
代码写完之后需要在AndroidManifest.xml中添加
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name="com.hanxi.luarun.MainActivity"
android:label="@string/app_name"
android:theme="@style/MyTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ResultActivity"
android:label="@string/app_name"
android:theme="@style/MyTheme">
</activity>
</application>
3. luajava的使用
为了在安卓上解释lua,采用了现成的luajava库,编译luajava可以参考http://www.cnblogs.com/astin/archive/2011/07/26/2117590.html。
luajava.h可以使用javah生成。后台我找到了现成AndroLua。直接把它集成到我的项目中的了。
import org.keplerproject.luajava.*;
LuaState L = LuaStateFactory.newLuaState();
L.openLibs();
L.LdoString("text = 'Hello Android, I am Lua.'");
L.getGlobal("text");
String text = L.toString(-1);
看上去和c与lua交互很类似的。
4. WebView的使用
最初以为高亮代码很难自己实现,就试着找现成的源码,结果没找到。就想着看看有没有js实现的代码编辑器,后面找到了一个不错的codemirror。并且集成到我的项目中在android4.0以上设备显示还不错,但是在2.3的设备上不能滑动(webview不支持div的滑动),底层的硬伤,试过修改codemirror和使用iscroll都没搞定,最后才找到jota(2年前见过这玩意,用过一两次没注意到它是开源的),然后研究它的源代码,就有了现在的高亮了。
WebView控件很简单的。js和java交互网上也找到很多教程js和java交互。
WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true); // 开启js,不打开这个设置,就只能显示静态的html网页
webView.loadUrl("http://www.baidu.com/"); // 远程网页
//webView.loadUrl("file:///android_asset/demo.html"); // 本地assert目录下demo.html
差不多就这样子,我打算用这个来显示about.html的东西。
5. 文件浏览
这个功能一开始就不打算自己实现,现在开发安卓的这么多,一定能找到这种源码,结果一下子就找到了现成的文件选择对话框Android开发 打开文件 选择文件对话框。已经集成到我的项目中了,我还模仿它完成了保存文件对话框的功能。
实现保存文件对话框的时候难点就在于如何在静态的layout中添加动态的layout,android: 静态XML和动态加载XML混合使用,以及重写Layout控件 这篇文章对我帮助挺大的。
封装静态的layout,其中预留动态layout的位置,方便添加动态layout的时候整理布局不变。
static public class SaveDialogLayout extends LinearLayout{
public SaveDialogLayout(Context context) {
super(context);
((Activity) getContext()).getLayoutInflater().inflate(R.layout.dialog, this);
}
}
public static Dialog createSaveDialog(int id, Context context, ... ){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
final SaveDialogLayout saveDialogLayout = new SaveDialogLayout(context);
LinearLayout openLayout = (LinearLayout) saveDialogLayout.findViewById(R.id.openLayout); // 预留放文件列表
FileSelectView fileListView = new FileSelectView(context, id, callback, suffix, images,path); // 文件列表
openLayout.addView(fileListView); // 添加到预留位置
builder.setView(saveDialogLayout);
...
}
6. 添加设置
android提供了PreferenceActivity,所以添加设置是比较简单的。
public class SetActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SysApplication.getInstance().addActivity(this);
addPreferencesFromResource(R.xml.preferences);
}
}
具体preferences.xml是什么样子的就参考代码吧。
7. 添加广告
我使用了有米广告,查看它的sdk文档就能搞定,非常简单的。我这里模拟器运行广告报错,但是实体机没问题。
8. 优化界面
最初一直再想去找别的应用中的ui元素,但是直接拿过来又有一堆的不搭配。最后找到了官方的ui编辑工具,超好用。网址:http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html