1. 程式人生 > >使用Android DocumentType來處理Strings.xml中的資源,實現xml內拼接

使用Android DocumentType來處理Strings.xml中的資源,實現xml內拼接

Use Android DocumentType  to handle String resources

問題是這樣的:

兩個string,string a是“賬號郵箱”,string b是“賬號郵箱:”,有沒有方法可以,直接在xml中,把string a和“:”拼接起來組成b。

<string name="account_email">賬號郵箱</string>
<string name="account_email_suffix_colon">賬號郵箱:</string>

一、開始想到的是String reference

<string name="punctuation_full_width_colon">:</string>

然後引用,會發現引用只能單獨引用。

<!--這種寫法是不正確的-->
<string name="account_email_suffix_colon">@string/[email protected]/punctuation_full_width_colon</string>
<!--這樣單獨引用是可以的-->
<string name="account_email_suffix_colon">@string/account_email</string>

二、 DocumentType

然後發現可以用DocumentType來實現,遵循w3c對於xml/html制定的標準。

官方文件

具體實現如下:

第一步,在xml中加入文件,DOCTYPE名稱是resources, 子元素ENTITY是準備拼接的兩個字串;

<!DOCTYPE resources [
    <!ENTITY colon ":">
    <!ENTITY account_email "賬號郵箱">
    ]>

第二步,resources中引用文件內容,使用&符號(會自動帶出結尾的;符號),這樣就可以正常引用account_email_suffix_colon了

<string name="account_email">&account_email;</string>
<string name="account_email_suffix_colon">&account_email;&colon;</string>

錯誤嘗試:

期間,也嘗試過string reference和doctype結合的形式,但是沒有用,編譯不過,例如:

<!--這樣寫無法編譯通過-->
<string name="account_email_suffix_colon">@string/account_email&colon;</string>

編譯錯誤:Error:(25, 5) error: resource string/account_email: (aka com.****:string/account_email:) not found.

反過來寫,倒是可以編譯過,但是不能我們想要的結果,只能顯示成":@string/account_email"

<!--這樣寫可以編譯通過,結果不對-->  
<string name="account_email_suffix_colon">&colon;@string/account_email</string>

總結:

  1. 引用@string/只能是單個的,不能多個,也不能和DocumentType&;結合使用
  2. 在xml內實現string拼接的正確方法是:

完整xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
    <!ENTITY colon ":">
    <!ENTITY account_email "賬號郵箱">
    ]>

<resources>
    <string name="account_email">&account_email;</string>
    <string name="account_email_suffix_colon">&account_email;&colon;</string>
</resources>
參考文章:
  1. https://stackoverflow.com/questions/4746058/reference-one-string-from-another-string-in-strings-xml
  2. http://onetouchcode.com/2016/11/24/ways-handle-string-resources-android/
  3. https://stackoverflow.com/questions/3722374/android-how-to-inject-a-string-element-into-another-string-element-in-xml
  4. https://www.jianshu.com/p/4aecd5d54b4e

相關推薦

使用Android DocumentType處理Strings.xml資源實現xml拼接

Use Android DocumentType  to handle String resources問題是這樣的:兩個string,string a是“賬號郵箱”,string b是“賬號郵箱:”,有沒有方法可以,直接在xml中,把string a和“:”拼接起來組成b。

android xml 嵌入多個xml頁面

採用TabHost的方式,可以方便在xml中插入獨立的多個xml,而不必將所有的程式碼寫入到一個xml中,降低了xml 黏連性。 簡單解釋: 建立以個mail.xml,其中加入two.xml和three.xml,同時建立每一個xml的activity,其中main的act

android 之使用多執行緒的AsyncTask實現下載網路圖片資源

前臺顯示:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:

關於使用maven建立web專案pom.xml出現錯誤web.xml is missing and is set to true

錯誤提示: web.xml is missing and <failOnMissingWebXml> is set to true   意思就是,web專案需要一個web.xml檔案,而你通過maven的 建立是沒有web.xml,所以需要自己手動生成

classpath:和classpath*:的區別以及web.xml配置多個xml檔案

首先我們都知道要使用spring,則需要在web.xml中增加如下程式碼:  Xml程式碼    <listener>  <listener-class>org.springframework.web.context.ContextLoaderList

Android Studio --自動刪除沒有用的資源給APK減減肥

有時候我們新增的一些資源,如圖片和一些沒用的程式碼,以及在新增第三方庫的時候我們只需要使用其中的一部分功能和一部分資源,那麼這個時候如果靠我們手工去怕是非常難做的,尤其是專案大的時候,Android 團隊工程師Tor Norbye ,在2014年11月1日

怎麼修改Myeclipsjsphtml,xml頁面模板

1:修改Myeclips的jsp模板頁面,首先找到Myeclips的安裝路徑,在裡面找到一個plugins在裡面搜尋wizards_檔案的Jar包 2:使用解壓檔案工具開啟檔案(千萬不要解壓jar檔案)開啟之後在檔案列表找到templates資料夾--->jsp資料

android imageButton 點選按鈕前按鈕顏色的變化

我們在開發的過程中,往往為了美化介面的需要,會修改按鈕的預設外觀,而因為Android中的按鈕有三種狀態—預設,被點選,被選中。所以,如果要改變按鈕的外觀,需要對這三種情況都做出修改,也許在以往,我們最容易想到的就是,手動監聽按鈕的選中和點選事件,然後寫程式碼來替換按鈕的背景,但是在android中,我們

用uniq處理檔案重複資料--交集差集計數等(轉)

經常有這樣的需求:兩個文字檔案要求取重複的行或只取不重複的,簡單的情況下用sort和uniq來處理是非常方便的: 利用現存兩個檔案,生成一個新的檔案 取出兩個檔案的並集(重複的行只保留一份) 取出兩個檔案的交集(只留下同時存在於兩個檔案中的檔案) 刪除交集,留下其他的行 cat file1 file2 |

Android基礎學習,使用Drawable資源之ClipDrawable資源實現圖片在特定位置展開。

ClipDrawable代表從其它點陣圖上擷取一個"圖片片段",XML中的根元素為<clip.../>,擷取的方向由clipOrientation控制 下面以一個慢慢展開的圖片為例 ClipDrawable代表從其它點陣圖上擷取一個“圖片片段”。在XML檔

Android定位&地圖&導航——基於百度地圖實現自定義圖示繪製並點選時彈出泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

手機Android音視訊採集與直播推送實現單兵、移動監控類應用

      最新手機採集推送直播監控以及EasyDarwin開源流媒體平臺的版本及程式碼:恰逢2014 Google I/O大會,不難看出安卓在Google的推進以及本身的開放性作用下,已經快延生到生活

android整合GooglePay支付實現應用支付如金幣等

1、前言 釋出海外市場,應用內又有支付功能,不可避免要整合GooglePay支付,國內不支援GooglePay,要FQ. 開發文件:整合應用內支付官方文件 2、開發前工具準備 (1)FQ工具:手機,電腦各一套,目前還能用的L

android Activity.this.getLayoutInflater()::動態載入佈局檔案實現彈窗效

activity類的拓展方法1:getLayoutInflater():將layout的xml佈局檔案例項化為View類物件,實現動態載入佈局 MainActivity.java package com.example.dynamiclayout; import and

怎樣識別圖文字實現圖片轉文字的方法

image www pro 點擊 中心 方法 1.5 五步 命令 如何識別圖中文字呢?相信工作中有很多小夥伴都有遇到過圖片轉文字的問題,那麽除了用電腦打字的方式進行解決,還有什麽簡單的方法可以實現這一操作呢?下面小編就來教大家一種使用OCR文字識別軟件將圖片轉文字的方法。

json&xml學習筆記--Java實現xml與json格式的互轉

寫在前面: 這裡使用的是耗費理解力最少的寫法,不代表最優解或最常用解。 XML轉JSON: 這個功能比JSON轉XML常用。 bo

使用strings.xml文字資源發現多個空格只顯示一個空格

先上圖 strings.xml程式碼如下: <resources> <string name="app_name">Test</string> <string name="app_text">型別:型別1\n

Android學習(32)在Acticity獲取strings.xml

strings.xml <resources> <string name="app_name">androidtest2</string> <string name="size_s">S</s

升級android studio3.0 在xml新增資源ID找不到

升級android studio3.0後發現新增的資源ID(包括string等資源)提示是找不到的,即使將新增的ID複製進去也是提示錯誤,但是編譯或者clean後就可以恢復正常了。但是沒有以前那樣能自動識別編譯。 ** 解決方法: ** 在build.gradle的def

Android studio 在資原始檔strings.xml新增空格、換行符

<string name="aiyisi_tip">\t\t愛義思(上海)科技發展有限公司,國家級高新技術企業,成立於2012年。\n\t\t愛義思來自Acesmart的音譯。\n\t\t愛義思的使命是:一流智慧產品 創造美好生活,讓生活不在難!\n\t\t愛義思奉行“敬天愛人