MyHosts--Android hosts文件编辑器

作者:emneg-zeerd

首发:http://www.itfunz.com/thread-17367-1-1.html

 

 

本文的主要内容是:借助做成一个简单的Hosts文件编辑器,讲解Android系统的动态控件、系统菜单的实现。

 

 

首先看效果图:

 

menu alert

 

 

系统菜单,实现很简单,不解释。

 

 

动态控件:

 

动态控件这个话题,其实对于玩程序的来说一点儿都不陌生。只不过每种语言框架实现的方式不同罢了。

在Android中,实现动态控件的方法,实际上有些取巧了,并不是真正的动态创建 控件,而是动态“搭 建 ”空间。
所有最终需要罗列出来的控件都要真实地写在view.xml文件中,只不过可以通过程序来实现不同的拼接甚至是重复。

拿我这个程序来说,最终显示给用户的画面,可以看到如下的元素:
1、第一行是一个TextView;
2、第二行是个Button;
3、第三行实际上是个RelativeLayout。这个Layout上面放了一个CheckBox,两个TextView,一个Button;
4、然后开始重复第三行。

这样,实际上就需要2个view.xml,一个作为主View,一个作为子View。
这里,主View如下所示(我把它命名为mymain.xml):

 

可以看出,实际上就是一个很简单的LinearLayout。当然,为了实现滚屏,在上面套了一个ScrollView。
这个Layout上面只有一个TextView,一个Button。

子View如下所示(我把它命名为myviews.xml):

 

可以看到,这也仅仅是一个简单的RelativeLayout。
上面放了一个CheckBox,两个TextView,一个Button。

而我这里所谓的动态控件就是说,程序做成时,由于不知道hosts文件会有几行,因此不知道应该画多少组CheckBox/TextView /Button的组合。需要在真正读取hosts文件的时候在根据实际行数添加需要的控件。


添加控件的程序框架如下:

 

当然,我们要做动态控件,就不可能仅仅是把它们堆起来就结束了。
如果是通常的Layout文件,我们要访问其中的某个控件,仅需要知道它的id就可以了。
((TextView)findViewById(R.id.xxxx)).setText(getString(R.string.yyyy));
OK,搞定了。

但是,在动态控件中,我们知道,实际上我们罗列了很多个同样的控件在我们的桌面上。
那上面的例子来说,每个RelativeLayout里面的四个控件都拥有相同的ID。
那么,我们就不能够直接通过findViewById(R.id.xxxx)的方式来简单的调用它们了。
而是需要去遍历每个RelativeLayout,然后去找到我们需要的那个控件。
看下面的图片,这个是我在Debug的时候,实际截取的(LinearLayout)l的内容:

注意看其中划红线的地方,是否能够对理解这个有所帮助,觉得这个世界更美好一些了啊?


知道了这个,我们下一步要做的事情就简单了。
我这个例子中,是hosts文件只有两行的情况。
如果你打算对第二行中的某个内容进行修改,只需要

 

 

用这个直接访问下表为3的mChildren。

或者你打算遍历

 

 

注意,我这里的遍历是从2开始的,为了跳过mymain.xml里面那两个控件(TextView和Button)。

好了,关于动态控件的话题就暂时就说到这里,如果没什么疑问,就不再补充了。
毕竟对于一个从没用过JAVA,一直用C的人来说,我也是一知半解……

 

最后在罗嗦几句:
1、运行程序 必须先root你的机器(这个是废话);
2、不要迷信su指令,以前没搞过Linux编程,在这个地方卡了好长时间。因为hosts文件权限 是644,即使su了也不能访问……因此大家看到我 的代码是这样子的:

 

完整的工程文件(开发环境MOTODEV)见:http://download.csdn.net/source/2459168


注:本文参考了creating-dynamic-view-multiple-a-view-x-times-get-set-value-for-each-group , 非常感谢原作者的无私奉献。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页