保持静态文本的最佳方法

Posted

技术标签:

【中文标题】保持静态文本的最佳方法【英文标题】:Best way to persist static text 【发布时间】:2017-02-17 18:34:41 【问题描述】:

我的应用程序使用了大量静态文本,我正在尝试找到一种最佳方式来保留和显示该文本。现在,我不需要专注于本地化文本,所以所有文本都进入strings.xml,这会带来很多格式化噩梦。

当然,它不是 100% 的静态内容,我有时会在其中有动态值,在我的情况下可以保持在 strings.xml 内,那么,持久化这个静态文本的正确方法是什么?

【问题讨论】:

如果我是你,我会将主题放在静态字符串数组中。 您说strings.xml 中已经有字符串,所以我会将文本保留在那里。否则,您将有一堆文本分散在多个位置。任何阅读该代码的人都会感到困惑。此外,当您确实关心本地化时,更新会更容易。 是的,但我想确保整个应用程序的格式一致。是的,我不打算在应用程序中将字符串拆分为不同的文件。 你能定义“它不是 100% 静态内容”的意思吗? 我添加了用于替换字符串或十进制字符的格式参数,如下所述:String Formatting 【参考方案1】:

静态文本内容正是您想要使用strings.xml 的目的,并且您会自动获得更容易本地化的额外好处,因为您可以为不同的语言使用不同的strings.xml。无需更改代码,只需不同的 XML 文件。

动态内容将是根据用户输入而变化的内容。您仍然可以使用strings.xml 来存储该动态内容的静态部分(如果有)。就像您可以传递给String.format() 或类似的“格式”字符串一样。

为此使用资源支持,这正是它打算做的事情(并且高效地做。)

【讨论】:

是的,但除了支持多行的基本格式之外,我想问是否有更好的方法,或者我的选择是否仅限于strings.xml 您最好、最灵活和可维护的方法是使用strings.xml。其他选项包括在代码中固定字符串,这不利于维护或国际化。【参考方案2】:

您的评论自相矛盾;你说:

现在,我不需要专注于本地化文本,所以所有文本都进入 strings.xml

如果你不需要本地化,那么你为什么要使用strings.xml

当然,答案是因为无论本地化如何,strings.xml 都是最合适的地方。

我不知道你对它做了什么样的噩梦,但它与任何其他字符串没有什么不同:

例如一个strings.xml:

<string name="refresh">Refresh</string>
<string name="order_placed" formatted="false">Order Placed: %s</string>

您可以稍后为它们使用相同的格式化程序:

getString(R.string.order_placed, "3pm")

将输出:

Order Placed: 3pm

如果你需要换行……

<string name="error">Something bad happened.\nPlease try again.</string>

将输出:

Something bad happened.
Please try again.

等等。

此外,如果您在命名资源时遇到问题,我或多或少地关注了this idea,尽管在底部描述了一些缺点,但它们对 android 来说并不是什么大问题工作室花哨的重构工具。

【讨论】:

明白了,除了格式化strings.xml之外似乎没有更好的选择。 我很想听听你关于弦乐的“噩梦”。 主要针对各种外形尺寸进行格式化(换行等)。 以及针对不同外形尺寸的自动间距。现在,我们在几行之后显示省略号,但我个人觉得省略号并不直观。也许我应该显示展开/折叠图标,并让展开的文本就地显示。 嗯,我同意这些事情,但从问题的角度来看,这些是格式问题,而不是字符串问题。这些东西必须由 Span 和 Text Formatters 控制:)【参考方案3】:

您可以创建一个名为 StaticBuffer 的类或以静态字符串数组作为数据成员的东西。

class StaticBuffer
   
    static String array[]; 
  

然后你可以在你的 onCreate() 或任何其他函数中初始化它并使用它。由于它是静态的,它的值将反映你在任何地方所做的更改。

例如:

//Initialization

StaticBuffer.array=new String[10];

//Usage

StaticBuffer.array[0]="Item1";

PS:这个想法是从我的一个朋友那里得到的。 :)

【讨论】:

老实说,这是一个非常糟糕的主意 :) 如果你想知道为什么,我可以说出我脑海中浮现的 3 件事:Theading、Nullcheck/BoundsCheck、Lookups。使用这个将是一个不必要的问题。

以上是关于保持静态文本的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

最佳静态照片库生成器 [关闭]

Java 最佳实践:只有静态方法的类

修复此“从实例方法写入静态字段”findbugs 警告的最佳方法是啥?

管理静态 HTML 网站中重复代码的最佳方法是啥

在静态控件中,为啥文本周围有一个紧密的矩形?

VMWare - 虚拟操作系统静态 IP 地址