保持静态文本的最佳方法
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。使用这个将是一个不必要的问题。以上是关于保持静态文本的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章