最近迷上了Android程序.下载了各种编写Android的程序的工具.这不,前几天搞了搞Delphi写Android,今天来体验下这C#写android.
工具我就不再介绍了,前几篇文章都有写.
写一个Android的浏览器,算是我熟悉这个工具的Hello World程序.
先看看程序的截图:
在编写过程中,发现了一些技巧,现在我分享给大家.
1.文本框焦点问题.
文本框一般都是默认的焦点所在,当进入一个Activity的时候,文本框一般会默认获得焦点,然后虚拟键盘就会蹦出来,十分影响用户体验.
手动的执行ClearFocus(C#语法)也是有焦点的存在,只是虚拟键盘没了.
比如说我这个浏览器刚开始的时候,webView就是获得不到焦点,因为焦点时钟都在文本框上,输入的文字都跑到文本框中了(网址栏).
那要怎么解决呢?
我们要在XML文件中动手了.
在文本框的父控件上加个属性,如下图所示:
EditText在TableRow中,我在TableRow的父控件TableLayout上加入了2句话:
android:focusable="true" android:focusableInTouchMode="true"这样,文本框的焦点问题就解决了.
在用WebView来进行RequestFocus的时候就OK了.
2.TableLayout的布局
说实话,我很讨厌Android的布局模式!因为我本来美工就差,这玩意儿还不好控制.
关于TableLayout,里边是一个个的TableRow.
每个TableRow中有>=0个列.
看程序最上边的 前进, 后退, 地址栏, 访问 按钮等排列,就是用的TableRow来控制的.
其中,因为要适应各种分辨率,所以,对地址框所在的Column进行设置,让它可大可小.
加上这两句话:
android:shrinkColumns="2" android:stretchColumns="2"这两句话表示,第三个Column可以伸缩.看清楚,是第三个,下标是从0开始的.
第一句话表示可以收缩,在没有空间的时候,第三个Column可以自动收缩,适应分辨率.
第二句表示可以拉长,在有空间的时候,第三个Column可以自动占满其余的空白.
在上图中也可以看到!
3.关于浏览器的进度条.
这个,我也说不大清楚,我是重写的类方法.
我重载了WebViewClient来实现前进,后退按钮的可用状态,地址栏的实时更新,
重载了WebChromeClient实现进度条.
具体的,大家可以看看我的工程,有源代码,大家可以自己研究.
经过DelphiXE5和Mono For Android的对比,说说他们各自的优点.
对于DelphiXE5来说,界面设计比较方便,可用的控件也比较多,还有界面的皮肤可以使用.
对于MonoDroid来说,界面是原生的XML解析,可以让大牛们自己编写XML,灵活性高,提供的组件也不少,最重要的是,
它和VS结合在一起,非常好用,奶爸级的开发工具,VS可以说是最好的IDE,没有之一.编译也比DelphiXE5快,编译出来的APK也很小.
工程下载地址(源代码):http://www.hxcarrot.com/Download/VS_Hades_Android_Browser.rar
是VS2010的工程.Android API版本 2.2
最后在来个有进度条的图: