[英]android studio - within library project how to reference app resources
我想將我的應用程序資源公開給我創建的庫項目。 該庫稱為auth(是firebase UI的一個分支),它是android studio中的一個庫模塊。 然后我有我的應用程序代碼來構建應用程序。 但我希望圖書館提供一些資源。 僅將資源復制到庫中會更好嗎? 我認為不是那樣占用更多空間。 我如何僅公開資源? 我的另一個想法是將所有資源都放在一個“公共庫”中,應用程序和auth都可以訪問它? 但這有點搞亂了我的干凈架構。 我可以做的另一件事是使庫依賴於應用程序。 因此將存在循環依賴關系。 可以嗎,因為那時不僅公開了我的資源,還公開了代碼?
我試圖將可繪制對象作為參數傳遞,但是正在尋找另一種解決方案,也許是在gradle中?
我不知道您為什么要完全做到這一點。 我無法想象應該使用任何極端情況,但是如果堅持下去,可以使用Resources.getIdentifier()來完成 。
int getIdentifier(字符串名稱,字符串defType,字符串defPackage)
范例:
resources.getString(resources.getIdentifier("app_name", "string", "app_package_name"))
我已經嘗試過了,並且效果很好,但是我不推薦它。
PS:我完全同意亨利的評論。
您可以將資源復制到庫中。 如果它們具有相同的名稱,則Android構建將僅合並資源,這樣您就不會重復。 請注意優先級,這取決於構建順序。
我只是想出了一種更聰明的方式來完成所有這些工作。 我們可以從樣式上做到這一點。 如果我在應用程序中覆蓋相同的庫樣式,則將影響庫(只要我們保持相同的名稱)。 這是執行miles_christian答案的一種方式。 這是基本概念:
在您的庫中聲明一種樣式,例如:
<style name="MyApp.my_library_style">
<item name="drawableStartCompat">@drawable/fui_ic_phone_white_24dp</item>
<item name="android:background">@drawable/mylibrary_logo</item>
<item name="android:textColor">#ffffff</item>
</style>
例如,如果要覆蓋應用程序樣式中的背景,則在應用程序中聲明完全相同的麥粒腫聲明,它將被覆蓋:
<style name="MyApp.my_library_style">
<item name="drawableStartCompat">@drawable/fui_ic_phone_white_24dp</item>
<item name="android:background">@drawable/myapp_logo</item>
<item name="android:textColor">#ffffff</item>
</style>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.