Thinking in XiaoQiang
世人皆有悲哀,只有你不明白
posts - 56,comments - 150,trackbacks - 0
android SDK中提供了TabHost使用起来很方便, 但是当tab比较多的时候,就会挤在一起,而不能横向的滚动比较麻烦.

      于是我尝试的制作了一个简单的使用Gallery来代替TabHost的例子, 确实够简单的,自娱自乐.....仅供参考

 

     

 

      使用BroadcastReceiver来切换不同的Tab

 

    public class ChangeTabBroadcastReceiver extends BroadcastReceiver {
        @Override
        
public void onReceive(Context context, Intent intent) {
            
int index = intent.getExtras().getInt(CURRENT_TAB_INDEX);
            Log.i(TAG, 
"onReceive index = " + index);
            
// setCurrentTab(index);
            topBar.setSelection(index);
            startGroupActivity(titleList.get(index).toString(),
                    (Intent) intentList.get(index));
        }
    }

 

     没有详细研究SDK中的TabHost实现机制, 使用起来还是有些不方便的地方


public class GalleryTabActivityDemo extends GalleryTabactivity {
    @Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setDelegate(
new SliderBarActivityDelegateImpl());
        
for (int i = 0; i < 14; i++) {
            Intent intent;
            
if (i % 2 == 0)
                intent 
= new Intent(this, DemoActivity1.class);
            
else
                intent 
= new Intent(this, DemoActivity2.class);

            
this.addTab("title" + i, android.R.drawable.star_on, intent);

        }
//必须在addTab后调用commit, 有点麻烦, 将来会找更好的办法
        super.setup();
    }

//可自定义切换tab时触发的操作
    private class SliderBarActivityDelegateImpl extends
            SliderBarActivityDelegate {
        
protected void onTabChanged(int tabIndex) {
            Log.d(
"onTabChanged""" + tabIndex);
        }
    }
}

最近工作比较忙,没太多时间学习android,将来会慢慢改善, 先凑合用, 抛块砖先, 各位有玉的使劲砸, 金条也行

 下载

posted @ 2010-05-13 15:46 小强 阅读(2146) | 评论 (0)编辑 收藏
学习android的练习小软件.

 

    制作文件管理器的初衷是发现G1上并没有随系统附带文件浏览软件, 考虑到电子书,媒体播放器或其它一些软件会使用到文件浏览,选择文件或文件夹, 所以先做了这个文件管理工具并封装一些参数供第三方程序调用

    应用很简单, 只是把手机和SD卡中的文件列出来, 支持图片和mp3的简单预览. 未来会有更多的功能扩充进来. 欢迎大家试用并提出意见.

--------------------------------------------------------4月更新0.3版 --------------------------------------------------------------------

自从上次更新后工作太忙,半年没玩儿ANDROID了, 最近刚刚闲下来, 继续完善文件管理器

顺便封装了一些其它的widget, 整理后再发上来

 

看着网上铺天盖地的各种android应用, 再看看我这个小破软件, 实在有点拿不出手, 但既然做了就得不断完善下去

目标是做一个封装widget的集合, 方便开发者使用

 

1, 使用线程和handler message机制读取文件列表, 提升软件性能

2, 解决文件列表多次滚动后速度下降的问题

3, 打开文件使用手机关联的应用

4, 增加文件缩略图显示

--------------------------------------------------------10月27日更新0.2版 --------------------------------------------------------------------

1.  0.2版主要增加了一些使用者的功能, 增加了收藏夹功能, 方便用户快速的浏览到经常访问的文件或文件夹

2.  修改了一些for developer的bug

 

 

--------------------------------------------------------  0.1版 --------------------------------------------------------------------

 

   

 

 

 

 

-------------------------------------------------------------------- for developer --------------------------------------------------------------------

G1上并没有随系统附带文件浏览软件, 考虑到电子书,媒体播放器或其它一些软件会使用到文件浏览,选择文件或文件夹, 所以先做了这个文件管理工具并封装一些参数供第三方程序调用,可以做为插件形式使用
把文件管理器封装起来并使用intent机制设置浏览参数和调用
目前暂不支持多文件选择, 将在下一版中发布
调用程序示例

1           Button button2  =  (Button) findViewById(R.id.but2);
2           button2.setOnClickListener(testFileManager);

 

 1  private  OnClickListener testFileManager  =   new  OnClickListener() {
 2           public   void  onClick(View v) {
 3              Intent intent  =   new  Intent( " net.uiiang.android.alkaid.FILEMANAGER " );
 4              
 5               // 参数root_directory, 设置浏览的根目录, 例如设置 /sdcard则只允许程序浏览sd卡中的内容, 当程序回退上层文件夹到/sdcard后不再向上回退
 6               // 参数类型为字符串, 默认为"/"(根目录)
 7              intent.putExtra( " root_directory " " / " );
 8              
 9               // 参数exclude_directory, 设置不显示的目录, 例如设 置"/data", "/dev", 则"/data", "/dev"这两个目录不会显示给用户
10               // 参数类型为字符串数组, 默认不排除任何文件夹
11              intent.putExtra( " exclude_directory " ,
12                       new  String[] {  " /data " " /dev "  });
13  
14               // 参数thrid_party_call, 当第三方程序调用时, 必须设置 此参数为true, 否则下面几个参数不起作用
15               // 参数类型为boolean, 默认为false, 会显示以下参数可设置的 所有菜单(除 选择菜单)
16              intent.putExtra( " thrid_party_call " true
);
17              
18               //  参数directory_show_type, 目录浏览方式
19               //  参数类型为 int, 默认为0
20               //  0 : 显示文件和文件夹(默认)
21               //  1 : 只显示文件
22               //  3 : 只显示文件夹 
23              intent.putExtra( " directory_show_type " 0 );
24              
25               // 参数use_menu_items, 设置显示的预置菜单
26               // 参数类型为:int数组
27               // 菜单列表:
28               //  1 : 上下文菜单-打开  (文件夹)
29               //  2 : 上下文菜单-删除
30               //  3 : 上下文菜单-详细信息
31               //  4 : 上下文菜单-复制
32               //  5 : option菜单-粘贴
33               //  6 : option菜单-新建文件夹
34               //  99: 上下文菜单-选择 , 若需要文件管理器返回一个选中的文件路 径, 则必须设置此菜单
35               //  当用户点击此菜单后, 文件管理器退出并返回给调用程序一个字符串数 组, 数组中包含文件路径信息
36              intent.putExtra( " use_menu_items " new   int [] {  99  });
37              
38               //  参数show_info_in_list, 是否在浏览文件中显示简单的 信息, 如文件夹中包含多少子文件夹和文件
39               //  默认为true
40              intent.putExtra( " show_info_in_list " false );
41              
42               //  参数show_file_extension, 是否显示文件后缀名
43               //  默认为 true
44              intent.putExtra( " show_file_extension " false );
45              
46               //  参数use_simple_view, 是否使用简单文件预览
47               //  用户单击文件后可以简单的预览文件内容, 目前支持图片和音乐文件
48               //  默认为 true
49              intent.putExtra( " use_simple_view " false );
50              
51               //  参数animation_show_list, 是否使用动态效果显示文 件列表, 目前只支持向下卷帘式的效果
52               //  默认为true
53              intent.putExtra( " animation_show_list " true );
54              
55               // 参数mutiple_select, 是否支持多选, 为true可以一次 性选择多个文件或目录
56               // 默认为false
57              intent.putExtra( " mutiple_select " , false );
58  
59              startActivityForResult(intent, SELECT_FILE);
60          }
61      };



通过startActivityForResult调用文件管理器, 并使用上下文菜单选择文件或文件夹

 

 

点击"选择"后, 返回到调用程序

 1      @Override
 2       protected   void  onActivityResult( int  requestCode,  int  resultCode, Intent data) {
 3           super .onActivityResult(requestCode, resultCode, data);
 4           if  (requestCode  ==  SELECT_FILE) {
 5               if  (resultCode  ==  RESULT_OK) {
 6                   //  参数名为selected_uri, 得到字符串数组中包含文件路径
 7                  String[] selectArr  =  data.getExtras().getStringArray(
 8                           " selected_uri " );
 9                   if  (selectArr  !=   null ) {
10                      String selectFile  =   "" ;
11                       for  (String string : selectArr) {
12                          System.out.println( " you select  =  "
13                                   +  data.getExtras().getStringArray(
14                                           " selected_uri " ));
15                      }
16                  }
17  
18              }
19          }
20      }

 

posted @ 2010-05-05 17:10 小强 阅读(329) | 评论 (0)编辑 收藏
     摘要: 1. 0.2版主要增加了一些使用者的功能, 增加了收藏夹功能, 方便用户快速的浏览到经常访问的文件或文件夹

2. 修改了一些for developer的bug  阅读全文
posted @ 2009-10-27 16:05 小强 阅读(1630) | 评论 (2)编辑 收藏
     摘要: 为文件将来做电子书或媒体播放器等程序时浏览文件
把文件管理器封装起来并使用intent机制设置浏览参数和调用  阅读全文
posted @ 2009-10-17 20:21 小强 阅读(2660) | 评论 (2)编辑 收藏
     摘要: 练习作品 一个简单的 android 文件管理器, 支持第三方程序调用  阅读全文
posted @ 2009-10-17 19:50 小强 阅读(1922) | 评论 (1)编辑 收藏
     摘要: 为了体现出android强大的网络功能 写了一个小爬虫程序, 通过网络直接从网站上下载电子书  阅读全文
posted @ 2008-06-30 12:00 小强 阅读(1371) | 评论 (0)编辑 收藏
     摘要: 晚上等着看欧洲杯,闲来无赖接着研究android , 更新了一下uReader  阅读全文
posted @ 2008-06-18 12:46 小强 阅读(1498) | 评论 (4)编辑 收藏
     摘要: 闲来无事, 研究了一下android. 做一个小应用练手.
  阅读全文
posted @ 2008-06-17 17:31 小强 阅读(1876) | 评论 (4)编辑 收藏
     摘要:   阅读全文
posted @ 2008-06-10 17:34 小强 阅读(404) | 评论 (0)编辑 收藏
     摘要: 删除ANDROID数据库  阅读全文
posted @ 2008-06-10 17:30 小强 阅读(1892) | 评论 (0)编辑 收藏
     摘要: android 技巧一, 快速显示修改结果  阅读全文
posted @ 2008-06-03 17:44 小强 阅读(350) | 评论 (0)编辑 收藏
     摘要: device commands:
adb update DATAOPTS - Flash the specified update file.
If file is not passed, update.zip is used.
adb push - copy file/dir to device
adb pull - copy file/dir from device
adb sync [ ] - copy host->device only if changed
(see 'adb help all')
adb shell - run remote shell interactively
  阅读全文
posted @ 2008-06-03 17:36 小强 阅读(1046) | 评论 (0)编辑 收藏
     摘要: adb(Android Debug Bridge)是Android提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态。还可以进行以下的操作:

1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级;

2、在设备上运行shell命令;

3、管理设备或手机模拟器上的预定端口;

4、在设备或手机模拟器上复制或粘贴文件;

  阅读全文
posted @ 2008-06-03 17:35 小强 阅读(1500) | 评论 (0)编辑 收藏
     摘要: Android是基于Linux内核的,对于喜欢研究底层的朋友来说,自然不会放过搞明白Linux层面上一些东西的机会。当然,最终目的还是要搞清楚Linux是如何和上层lib以及虚拟机结合的,但是这得等Google完全开源Android之后了。很多关于Linux运行的细节,都可以通过adb的shell来看到。  阅读全文
posted @ 2008-06-03 17:30 小强 阅读(3572) | 评论 (1)编辑 收藏

大学 (一) http://www.blogjava.net/uiiang/archive/2007/05/27/120342.html

    康诰曰:“克明德。”大甲曰:“顾諟天之明命。”帝典曰:“克明峻德。”皆自明也。

    汤之盘铭曰:“苟日新,日日新,又日新。”康诰曰:“作新民。”诗曰:“周虽旧邦,其命惟新。”是故君子无所不用其极。

    康诰说:“能够弘扬光明的品德。”太甲说:“念念不忘这上天赋予的光明禀性。”尧典说:“能够弘扬崇高的品德。”这些都是说要自己弘扬光明正大的品德。

    商汤王刻在浴盆上的箴言说:“如果能够有一天自新,就应保持天天自新,永远不断自新。”康诰中说:“鼓励人们弃旧图新。”诗经中说:“周朝虽然是古老的国家,但却禀受了天命,自我更新。”所以,品德高尚的人无处不追求完善。

    软件开发乃至IT行业的更新速度极快,今天出个JAVA,明天出个.net,后天又来个什么ruby。所以咱们要不断的学习,不断的进步才能跟上技术的更新速度,才能不被淘汰。

    但什么叫自新,这个自新不是说今天出了JAVA,呼啦呼啦的就全买thinking in java去了,明天出了.net又呼啦呼听的全安.net 2005去了。自新是一个发掘和汲取的过程。别一天到晚的看不起struts嫌他麻烦,瞧不上hibernate嫌他浪费性能。人家的技术能在全世界流行,必然有过人之处。想想他为什么能在全世界流行,他体现的是哪种设计思想。多学学人家的优点,想办法把这些优点用在自己的代码上。

    诗云:“邦畿千里,惟民所止。”诗云:“缗蛮黄鸟,止于丘隅。”子曰:“于止,知其所止,可以人而不如鸟乎!”

    诗云:“穆穆文王,于缉熙敬止!”为人君,止于仁;为人臣,止于敬;为人子,止于孝;为人父,止于慈;与国人交,止于信。

    诗经说:“京城及其周围,都是老百姓向往的地方。”诗经又说:“‘缗蛮’叫着的黄鸟,栖息在山丘的角落上。”孔子说:“连黄鸟都知道它该栖息在什么地方,难道人还能不如一只鸟儿吗?”

    诗经说:“品德高尚的文王啊,为人光明磊落,做事始终庄重谨慎。”做国君的,要做到仁义;做臣子的,要做到恭敬;做子女的,要做到孝顺;做父亲的,要做到慈爱;与他人交往,要做到讲信用。

    经常看到论坛上有人抱怨,自己的工作单调只不过是复制粘贴别人的代码。可你有没有想过为什么去复制粘贴,是因为他的代码写得太好了,放到哪里都能用?还是架构设计得不合理,需要重构。如果是好,他好在哪里,他为什么这么写。如果不好,又不好在哪里,应该怎么改,如果是你来设计,你又会怎么做来避免犯这样的错误。

    很多人抱怨自己在一个小公司不得志,可有没有想过为什么在这种小公司。你有没有给IBM,google这样的公司投过简历,投了简历有没有面试,面试了这些大公司为什么不要你,而是录用了别人。要摆正心态,找到自己的位置。你可以觉得不得志,但要有真才实学。庞统那么大的才,到了刘备手下不还是先被发配去当县令。是金子终要发光的,后来刘备不也终于认识到庞统的才能并委以重任吗。可如果你啥都不会,看这个看不起,瞧那个瞧不上。一天到晚就知道上网聊天打游戏泡MM。就算到了曹营也就当个蒋干,成事不足败事有余。要本着谦虚学习的态度来对待工作对待周围的人,要学会从别人身上发现优点。

    诗云:“瞻彼淇澳,菉竹猗猗。有斐君子,如切如磋,如琢如磨。瑟兮僩兮,赫兮喧兮。有斐君子,终不可諠兮!”如切如磋者,道学也;如琢如磨者,自修也;瑟兮僩兮者,恂栗也;赫兮喧兮者,威仪也;有斐君子,终不可諠兮者,道盛德至善,民之不能忘也。

    诗经说:“看那淇水弯弯的岸边,嫩绿的竹子郁郁葱葱。有一位文质彬彬的君子,研究学问像加工骨器一样,不断切磋;修炼自己像打磨美玉,反复琢磨。他庄重而开朗,仪表堂堂。这样的一个文质彬彬的君子,真是令人难忘啊!”

    这里所说的“加工骨器,反复琢磨”,是指做学问的态度;“像打磨美玉,反复琢磨”,是指自我修炼的精神;说他“庄重而开朗”,是指他内心谨慎而有所戒惧;说他“仪表堂堂”,是指他非常庄重;说“这样一个文质彬彬的君子,真是令人难忘啊!”是指由于他品德非常高尚,达到了最完善的境界,所以使人难以忘怀。

    不要为了工作而工作,为了写代码而写代码。既然干了这行了就要干好,即使不求名扬天下,至少要也对得起自己这么多年的努力吧。我带过几个手下,我每次安排任务后都会说:认真干活,只要干完活,你去打CS我都不管。我说这话的目的是不想给大家太多压力,大家都挺辛苦都不容易。只要干完活,该聊天该上网随便你。可如果真正会学习的人,就应该明白,自己干的那些活,永远是别人安排的。要想多学东西,还得根据自己的特点和能力补充知识。自己写的代码是不是已经无懈可击了,有什么地方值得优化,实现方法是不是可以用更优雅的方式。

     总之,心中要想着不断进步,要么不做,做了就要做到更好。

posted @ 2007-05-29 13:05 小强 阅读(1105) | 评论 (1)编辑 收藏
        这两三年来,生活一直被工作占据着,习惯了用工作来充实的生活,闲下来却非常无聊。即使不加班的时候,回到家里也不知道干点什么好,于是下意识的又开始写代码,学新技术。这样的生活单调乏味,人也变得无趣起来。于是决定,从今天起在家休息的时间,不再写代码。重新找回以前的兴趣,丰富业余生活。想起以前上学时住校,闲得没事做就到图书馆借书,反正呆着也是呆着,那会儿什么书都看,从古今中外概不排斥。可惜工作后再没这闲心了。

        今天休息,在家翻了翻书柜,读一读大学。蓝色字是原文,红色的字是我的一些理解,如果有错的地方,还望大家指正,谢谢。

        大学之道,在明明德,在亲民,在止于至善。知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。物有本末,事有终始,知所先后,则近道矣。

        大学的宗旨在于弘扬光明正大的品德,在于使人弃旧图新,在于使人达到最完善的境界。知道应达到的境界才能志向坚定;志向坚定才能够镇静而不骄躁;镇静而不骄躁才能够心安理得;心安理得才能够思虑周详;思虑周详才能够有所收获。每样东西都有根本和枝末,每件事都有开始和终结(还记得黑客帝国3里,先知说的那句话吗?Everything that has a beginning has an end。大概先知也读过大学)。明白了这本末始终的道理,就接近事物发展的规律了。

        在软件开发过程中,我们经常会遇到很多问题。其实每一个客户需求都是一个大问题,是一堆问题的总合。这就需要我们在编程之前,明白自己要做什么(知止而后有定),要认真的分析我们的需求和目标。这样才能不被一堆稀奇古怪的问题吓倒,能够让我们从容的面对这些工作(定而后能静)。初学者经常犯一个错误,就是不分析问题。调试出错代码的时候,经常是一遍一遍的运行错误的代码,然后看着报错信息发呆。而不知道如何分析错误所在,也不知道在哪里打印几行标志来找出出错的代码的位置。于是越看越乱,越乱越心慌。这时候就需要先静下心来不要被一个报错信息吓到(静而后能安)。只有静下心来,才能想到其实任何报错信息,都是有根有据的,只要根据提示信息中给出的线索,或者在代码中打印几条标志信息,或者根据你输入的信息运行的类或方法去推理,就能够找到出错的地方(安而后能虑)。当你做到这一步,你就找到问题的所在了,经验值又增加了(虑而后能得)。

        就像刚才所说,任何代码任何错误,都是有根有据不会凭空出现。我们软件开发人员的工作,就是解决一个一个的问题。只要能把这些问题分析得当,条理清晰的列出来,就离成功不远了。

        很多初学编程或刚刚工作的人都会报怨,看不懂代码,不知道业务逻辑所以没法工作。其实做事的时候,不要一上来就想一次解决问题,要循序渐进,你连代码出错出在哪里都不知道,怎么去修改错误。要先找到出错的代码是哪个文件,是从哪里进入的,又经过哪些方法的调用,要明白这些代码的业务逻辑。如果不明白就先注释起来。初学的时候要学会分析问题的方法,找到问题的关键点,每行代码其实都是在调动数据,但有些调动是对当前业务没有影响的这些可以先排除掉,那些会对后面的业务逻辑产生影响的,都是问题的关键点。初学者不要嫌麻烦,遇到这些关键点一定要注释。就算不明白整个的业务逻辑,单独一行代码的意思总该明白吧,无非就是添删查改和方法调用嘛。当你把这些代码通读一遍并都注释后,就可以把这些注释当成读小说一样读下来,再复杂的业务逻辑也应该能读明白了。

 

        古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知;致知在格物。
        物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。
   

        古代那些想在天下弘扬光明正大品德的人,先要治理好自己的国家;要想治理好自己的国家,先要管理好自己的家庭和家族;要想管理好自己的家庭,先要修养自身的品性;要想修养自身的品性,先要端正自己的心思;要想端正自己的心思,先要使自己的意念真诚;要想使自己的意念真诚,先要使自己获得知识;获得知识的途径在于认识和研究万事万物。通过对万事万物的认识,研究后才能获得知识;获得知识后意念才能真诚;意念真诚后心思才能端正;心思端正后才能修养品性;品性修养后才能管理好家庭和家族;管理好家庭后才能治理好国家;治理好国家后天下才能太平。

  咱们先不说什么治国之论,单就软件开发这个行业来讲。很多人都在抱怨公司小挣钱少管理混乱感觉屈才之类的。可你真的有这么大才吗,那些刚刚毕业的学生,在学校里玩儿了四年。到公司时什么都不会白纸一张,就像我以前发过的一个文章里说的。都不用说敬业精神,当你连最起码的认真工作都做不到时,还有什么资格说公司给你的工资太少,对不起你的工作量。

  要么别做这份工作,别接受这个任务,既然做了就要做好。不要把工资少当成不认真工作的借口。你再不认真工作,该被剥削的地方谁也跑不了,老板还是要赚他的钱。但工作经验是自己的呀!!! 软件开发这个工作需要不断学习不断的进步才能保持自己的位置。而软件开发正是需要认真工作,才能体会出其中的奥妙,体会其中的精华所在。要想让自己将来有好的发展,就要先做到自律,休息的时候当然要玩儿,但上班的时候就要以工作为重。要想自律就要提高自身修养,提高自己对工作重要性的认识。要想提高自身修养,就要端正自己的心态,上班的时候不要总去想什么窗外的高楼街上的美女。要想端正心态,就要让自己的意念真诚,要真心的认真负责的对待自己的工作,对待自己手中写出的每一行代码。这时就需要先获得知识,要学会这些技术,不然什么都不懂的人只能复制粘贴别人的代码,却不知道这些代码在干什么,往往复制错了自己却混然不知。

  自天子以至于庶人,壹是皆以修身为本。其本乱而末治者否矣,其所厚者薄,而其所薄者厚,未之有也!

  上自国家君王,下至平民百姓,人人都要以修养品性为根本。若这个根本被扰乱了,是不可能治理好家庭甚至国家天下的。不分轻重缓急,本末倒置却想做好事情,这也同样是不可能的。

  就像刚才说的,刚工作的人工资少工作累这是事实情况,大家都是从这一步走过来的。只有经历过这一步,才能明白认真工作和提高工作效率的重要性。要想提高工作效率,就要提高自身能力,就要积累工作经验。可工作经验这东西并不是说来就来的,需要自己刻苦努力才能得来。并不是说明天把你送到IBM或者什么大公司,给你好多好多钱,给你换了一个超美的工作环境。你就突然什么都会了什么都懂了。当你什么都不会还净犯错的时候,真的到了这种环境中,周围都是高手,你还好意思和别人打招呼吗?

posted @ 2007-05-27 20:27 小强 阅读(1406) | 评论 (4)编辑 收藏