是否可以在 android 中以编程方式创建 string.xml 文件?

Posted

技术标签:

【中文标题】是否可以在 android 中以编程方式创建 string.xml 文件?【英文标题】:Is it possible to create string.xml file programmatically in android? 【发布时间】:2021-12-05 04:50:04 【问题描述】:

如何在android studio项目的资源文件中以编程方式创建string.xml文件

例如

"languageKeys": [
        
            "key": "welcome_screen_title",
            "value": "ZervBee"
        ,
        
            "key": "skip_button",
            "value": "தவிர்"
        ,
        
            "key": "walkthrough_title_1",
            "value": "மேசையிலிருந்து ஆர்டர்"
        ,
        
            "key": "walkthrough_title_2",
            "value": "ஆன்லைனில் பணம் செலுத்துங்கள்"
        ,
        
            "key": "walkthrough_title_3",
            "value": "வரிசைகளை தவிர்க்கவும்"
        ,
        
            "key": "walkthrough_desc_1",
            "value": "இப்போது நீங்கள் உங்கள் மேஜையில் இருந்து உணவை ஆர்டர் செய்யலாம்"
        ,
        
            "key": "walkthrough_desc_2",
            "value": "மாற்றத்தைப் பற்றி ஒருபோதும் கவலைப்பட வேண்டாம், ஆர்டர் செய்யும் போது சரியான தொகையை செலுத்துங்கள்"
        ,
        
            "key": "walkthrough_desc_3",
            "value": "வரிசையில் நிற்பதைத் தவிர்க்கவும், உங்கள் ஆர்டர் தயாராக இருக்கும்போது நாங்கள் அறிவிப்போம்"
        ,
        
            "key": "choose_langauge_title",
            "value": "மொழியை தேர்வு செய்யவும்"
        ,
        
            "key": "my_cart",
            "value": "என் வண்டி"
        
    ] 

这是来自 API 的响应,采用 JSON 格式。我将响应转换为 xml 格式。 如何将该 xml 文件保存为资源中的字符串 file.xml。他们有什么方法可以转换它。

提前致谢

【问题讨论】:

您能否编辑您的问题以准确说明您要在这里实现的目标?示例会很有帮助。 【参考方案1】:

string.xml 文件是资源文件。与任何其他资源文件一样,这些文件不能在运行时修改。更准确地说,res 文件夹中的任何文件都不能在运行时修改,例如。 string.xmldrawablesvalues.xml

理想情况下,您可以解析您的回复并将其存储在SharedPrefernce 中,或者使用Rooom 设置local db

【讨论】:

【参考方案2】:

资源文件在构建时使用(单向/只读使用)。你误解了他们的目的。

您可以使用 GSON 等将 JSON 响应加载(反序列化)到 Java 对象中。

为反序列化准备 LanguageKey 类:

public class LanguageKey 
    public final String key;
    public final String value;

    public LanguageKey(String key, String value) 
        this.key = key;
        this.value = value;
    

一个示例 MainActivity:

public class MainActivity extends AppCompatActivity 
    private static final String JSON = "[" +
            "" +
            "\"key\": \"welcome_screen_title\"," +
            "\"value\": \"ZervBee\"" +
            "," +
            "" +
            "\"key\": \"skip_button\"," +
            "\"value\": \"தவிர்\"" +
            "" +
            "]";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // deserialize using GSON
        List<LanguageKey> languageKeys = new Gson().fromJson(
            JSON, new TypeToken<List<LanguageKey>>().getType()
        );

        // Now, you can use languageKeys object directly

        for (LanguageKey languageKey: languageKeys) 
            Log.d("LanguageKey", String.format(
                "key: %s; value: %s",
                languageKey.key, languageKey.value
            ));
        
    

注意:您的 JSON 无效。您可能需要在处理之前删除"languageKeys":

【讨论】:

感谢您回答我的问题。我动态使用字符串文件的目标取决于 json 响应。无需手动更改字符串值。他们是任何方式或任何其他替代选项 @SumanRadhakrishnan 其他方法之一是反序列化。

以上是关于是否可以在 android 中以编程方式创建 string.xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在android中以编程方式创建多个列表

在 Android 中以编程方式打开位置提供程序

多个ListViews在android中以编程方式创建

如何在 android studio 中以编程方式取消订阅 OneSignal

在android中以编程方式创建布局 - 问题