Android中资源文件相关

resources标签

  • 所有的资源文件,都可以放在同一个<resources>标签下面;但放到不同的文件中,更方便查找
    例如:colordeclare-styleabledimenintegeritemstringstyle

string标签translatable属性

使用translatable="false"属性可以让内容直接嵌入到引用的地方,而不做翻译处理。

  • 举例来说,下面的用法就可以将android.support.design.widget.AppBarLayout$ScrollingViewBehavior直接嵌入到了ScrollView
1
2
3
4
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
1
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
  • 另一种方案:

    It’s the ignore attribute of the tools namespace in your strings file, as follows:

    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <resources
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="MissingTranslation" >
    <!-- your strings here; no need now for the translatable attribute -->
    </resources>

使用场合

不希望字符串被翻译。

外部链接

string动态设置下划线文本的方案;

1
2
<!-- 还可以使用:<b>、<i>、<u>等html标签 -->
<string name="nav_name"><u>%1$s</u></string>
1
2
3
4
5
6
7
<TextView
android:id="@+id/tv_nav_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nav_name"
android:textColor="@color/colorPrimary"
android:textSize="18sp"/>
1
2
3
// 动态控制带下划线的文本内容
String name = "昵称";
tvName.setText(mContext.getString(R.string.nav_name, name));

使用string字符串资源的一些建议

  • 不同模块相同的文字不要复用,最好每个模块都对应自己的字符串资源(否则,牵一发而动全身,除非你就想要这样);

string字符串中的单复数

  • 单纯引用
    1
    2
    3
    4
    <plurals name="book">
    <item name="one">book</item>
    <item name="others">books</item>
    </plurals>
1
2
3
int bookCount = 4;
mContext.gerResources().getQuantityString(R.plurals.book, bookCount);
//~ result: books
1
2
3
4
<plurals name="book">
<item name="one">%d book found.</item>
<item name="others">%d books found.</item>
</plurals>
1
2
3
int bookCount = 4;
mContext.gerResources().getQuantityString(R.plurals.book, bookCount, bookCount);
//~ result: 4 books found.

When using the getQuantityString() method,
you need to pass the count twice if your string includes string formatting with a number.
For example, for the string %d songs found,
the first count parameter selects the appropriate plural string
and the second count parameter is inserted into the %d placeholder.
If your plural strings do not include string formatting,
you don’t need to pass the third parameter to getQuantityString.

外部链接