写代码的童鞋肯定都会在项目越写越大、越写越复杂后慢慢觉得,就算自己再怎么注意命名规范,再怎么把注释写详细,回来来找一个 item 的布局或者一个控件的 drawable 的时候还是会找上半天,因为不管是 layout 还是 drawable 目录下,资源文件总是越变越多,并且命名的相似性也可能很大。偶然间发现了一个 AS 下对资源进行分包的方法,亲测有效,下面是原文地址,我只是将自己的实践过程记录下来,以后不用到处去找。
原帖地址:https://github.com/dmytrodanylyk/folding-plugin
1 建立资源文件夹
可以看到不只是 layout 文件夹,还有 drawable 、 values 文件夹都可以分包。需要注意的是布局 xml 文件必须放在名为 layout 的文件夹下,也就是说比如 activity_5.xml 必须放在 five--->layout 目录中,不能直接放在 five 目录下,否则系统会找不到这个布局文件。原先的 layout 文件夹可以保留,可以放一些公用的 layout,如果没有东西的话可以删除。
2 配置 app.gradle
app 目录下的 gradle 添加如下代码:
android {
...
...
sourceSets {
main {
res.srcDirs = [
'src/main/res',
'/src/main/res/layout/',
'/src/main/res/layouts/',
'/src/main/res/layouts/one',
'/src/main/res/layouts/two',
'/src/main/res/layouts/three',
'/src/main/res/layouts/four',
'/src/main/res/layouts/five'
]
}
}
}
注意与上图的结构对应,‘/src/main/res/’ 最好是放在首位。
3 效果测试
每个 Activity 的代码都是差不多的,所以只贴一个:
public class Activity1 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_1);
findViewById(R.id.iv_1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity2.class));
finish();
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.qinshou.resourcesubcontractingdemo.Activity1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="20dp"
android:text="@string/carter"
android:textColor="#000000"
android:textSize="24sp" />
<ImageView
android:id="@+id/iv_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:src="@drawable/carter" />
</LinearLayout>
<resources>
<string name="carter">文斯卡特</string>
</resources>
4 总结
这一篇应该不算是什么技术点,算是一种代码的优化吧,在写代码的同时,注重结构和规范是一种好习惯,可以让你的代码更容易被别人理解,自己回过头来看的代码的时候也会更容易翻阅,这些代码规范跟设计模式是一个道理。有可能时隔很久,自己看自己的代码都是一团糟,我们要做的就是在慢慢的积累经验的情况下尽量避免这样的情况,不仅让自己成为技术大牛,也要成为代码洁癖者。