Van*_*nel 10 java enums android
我正在开发一个Android应用程序,我想知道我是否可以设置Enum.toString()多语言.
我打算Enum在a 上使用它Spinner,我想使用多语言文本.
public class Types
{
public enum Stature
{
tall (0, "tall"),
average(1, "average"),
small(2, "small");
private final int stature;
private final String statureString;
Stature(int anStature, String anStatureString) { stature = anStature; statureString = anStatureString; }
public int getValue() { return stature; }
@Override
public String toString() { return statureString; }
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何Context.getString()在Enum中使用,我已经硬编码"高","平均"和"小"来测试它.我enum在辅助类中定义了内部.
这是我如何使用enum上面的Spinner:
mSpinStature.setAdapter(new ArrayAdapter<Stature>(mActivity, android.R.layout.simple_dropdown_item_1line, Stature.values()));
Run Code Online (Sandbox Code Playgroud)
你知道我怎么办吗?
我创建了一个简单的库,它是我的大项目(Xdroid)的一部分:
compile 'com.shamanland:xdroid-enum-format:0.2.4'
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过使用注释避免所有枚举的相同的monkey-job(声明字段,构造函数等):
public enum State {
@EnumString(R.string.state_idle)
IDLE,
@EnumString(R.string.state_pending)
PENDING,
@EnumString(R.string.state_in_progress)
IN_PROGRESS,
@EnumString(R.string.state_cancelled)
CANCELLED,
@EnumString(R.string.state_done)
DONE;
}
Run Code Online (Sandbox Code Playgroud)
然后使用常见的Java方法 - 使用类的扩展java.text.Format:
public void onStateChanged(State state) {
EnumFormat enumFormat = EnumFormat.getInstance();
toast(enumFormat.format(state));
}
Run Code Online (Sandbox Code Playgroud)
strings.xml中
<string name="state_idle">Idle</string>
<string name="state_pending">Pending</string>
<string name="state_in_progress">In progress</string>
<string name="state_cancelled">Cancelled</string>
<string name="state_done">Done</string>
Run Code Online (Sandbox Code Playgroud)
看这里如何Toast简单地展示.
您还可以从github编译演示应用程序.
假设这个资源路径
String resourceBundlePath = "my.package.bundles.messages"
Run Code Online (Sandbox Code Playgroud)
在包裹中my.package.bundles你可能有等等messages.properties。messages_en_US.properties
然后,使用
ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundlePath);
String messageKey = "myFirstMessage";
String message = resourceBundle.getMessage(messageKey);
Run Code Online (Sandbox Code Playgroud)
messagemessageKey将包含上定义的属性的值messages.properties。如果当前的 Locale 实际上是,en_US您将从 中获取值messages_en_US.properties。如果当前区域设置是您没有属性文件的值,则该值将来自默认值messages.properties
您也可以致电
ResourceBundle.getBundle(resourceBundlePath, myLocale);
Run Code Online (Sandbox Code Playgroud)
但通常最好使用平台区域设置(查看 jvm 参数 -Duser.language、-Duser.country)
您可以为每个要使用枚举元素名称的键进行翻译的枚举创建一个 ResourceBundle,并在枚举的 toString() 实现中使用它:
@Override
public String toString() {
return resourceBudle.getString(super.toString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7843 次 |
| 最近记录: |