1. 程式人生 > >Android Studio 對資源分包

Android Studio 對資源分包

寫程式碼的童鞋肯定都會在專案越寫越大、越寫越複雜後慢慢覺得,就算自己再怎麼注意命名規範,再怎麼把註釋寫詳細,回來來找一個 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();
            }
        });
    }
}

activity_1.xml:
<?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>

one 下面的 values 中的 string.xml:
<resources>
    <string name="carter">文斯卡特</string>
</resources>

執行一下,可以看到程式正常執行,每點選一下圖片跳轉到下一個 Activity,直到最後一個就退出:

4 總結

這一篇應該不算是什麼技術點,算是一種程式碼的優化吧,在寫程式碼的同時,注重結構和規範是一種好習慣,可以讓你的程式碼更容易被別人理解,自己回過頭來看的程式碼的時候也會更容易翻閱,這些程式碼規範跟設計模式是一個道理。有可能時隔很久,自己看自己的程式碼都是一團糟,我們要做的就是在慢慢的積累經驗的情況下儘量避免這樣的情況,不僅讓自己成為技術大牛,也要成為程式碼潔癖者。