Effective Android设计

晨曦之光 发布于 2012/03/09 12:11
阅读 233
收藏 0


摘要: 本文总结了自己在Android项目实施中遇到的设计问题。 即如何更好的进行组织和设计, 让项目更加稳定, 更容易维护, 详细情况请查看后文提供的代码。

1 Manifest.xml使用Activity不要用相对路径

  •   Manifest节点需要指定package的名称, 启动Activity需要放置在Manifest节点宣扬的package中. 这个也是R.java的位置, 这点保留并且需要引起注意
  •  其它Activity节点的Android name保持全路径,不采用.开头的相对路径, 避免找不到
  • 采用Library包也需要使用该规则.

 2 重视android:layout_weight这个节点的应用.

  • layout_weight + Linear Layout +嵌套UI,基本上可以搞定一切跟对齐有关的问题, (如果你有设计过Swing/SWT的经验, 基本上其它的Layout都是浮云, LinearLayout 加上权重分配, 再结合嵌套方式, 基本上可以搞定一切问题。)
  •  对齐的方向上,必须用fillparent: android:layout_width="fill_parent"
  • 注意android:layout_weight的值越大,表示占领的位置越短

例子的部分代码如下, 这个貌似是做登录界面基本上都要碰到的难缠问题.

	<LinearLayout android:layout_width="fill_parent"
		android:layout_marginTop="5dip" android:layout_height="wrap_content"
		android:orientation="horizontal">
		<TextView android:layout_height="wrap_content"
			android:layout_weight="5" style="@style/dialog_txt_view_font"
			android:layout_width="fill_parent" android:layout_marginLeft="5dip"
			android:layout_marginRight="5dip" android:text="密码:" android:gravity="left"
			 />

		<EditText android:layout_height="35dip" style="@style/dialog_edit_txt_font"
			android:layout_width="fill_parent" android:layout_weight="2"
			android:layout_marginLeft="5dip" android:layout_marginRight="5dip"
			android:autoText="false" android:capitalize="none" android:gravity="fill_horizontal"
			 />
	</LinearLayout>

运行的结果:


3界面风格定制尽量采用Style文件的方式

三点好处

  • 保持界面风格完全统一
  • 跟编程类似, 消除冗余代码, 方便重用
  • 修改、重构界面非常方便,维护非常Easy

使用style的方式,网上有很多资料, 因此不贴出具体的方式。 可以参照本文提供的代码及其注释

 

4 注意Layout文件的可重用部分分离, 并动态加载特殊性。

下面一个示意图说明UI的可重用性在一个Android项目中的平常:


上面两张图, 就是两个Activity, 他们都是上中下的结构, 方便起见的设计是: 分离一个父Layout面板. 并将中间的特殊UI分离出来。在具体的Activity中,利用动态的方式加载,代码如下:

		LinearLayout specialUI = (LinearLayout)findViewById(R.id.specialUI);
		
		LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);   
		View listView = inflater.inflate(R.layout.listview_common,null); 
		LayoutParams para = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		specialUI.addView(listView, para);
		
		itemlist = (ListView) findViewById(R.id.itemlist);
		refreshListItems();

运行的结果如下(中间是List效果, 可以参考一下):



这样做的必须性在于:

1. 保持一致性的需要

2.易维护的需要

 

5 采用Library项目管理自己的API.

个人一直在努力宣传作为软件工程师, 需要有自己的API库. Android中可以将工程设置为:Is Library. 或者引用其它的Library工程。下面是我曾经提到的内容。可以通过Google去查询需要的信息。

至于原因, 可以再重申一下,新手解决问题的方式是: 看到问题,调研,解决。老手解决的方式是:看到问题,参考从前案例,解决。个人的API 就是你从前的案例。千万别小看这个区别。


详细代码


   


原文链接:http://blog.csdn.net/ostrichmyself/article/details/6903058
加载中
返回顶部
顶部