2013-10-07 32 views
0

我需要做一个单身或静态类更改应用的本地化,这将具有以下实施的Android的setContentView ecnapsulation

public static void changeLocale(Context context , int layoutID ,int pos) 
{ 
    if (currentLocale == pos) 
     return; 
    Locale locale; 
    if (pos == 0) 
     locale = new Locale("en"); 
    else 
     locale = new Locale("ar"); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    context.getApplicationContext().getResources().updateConfiguration(config,    context.getApplicationContext().getResources().getDisplayMetrics()); 
    //setContentView(layoutID); 
} 

它将从任一活动或Dialog调用,在这里我的问题是, Context没有setContentView(),我应该通过什么接口或类而不是具有setContentView()的上下文,其中一种方法是传递一个Object并将其投射到try catch块中的ActivityDialog,但我相信是一个更好的方法来做到这一点,谢谢你的帮助

回答

0

你不需要当您更改区域 设置内容查看,这是从excert:http://developer.android.com/guide/topics/resources/localization.html

你只需要创建一个特定的区域名为res /布局localename新布局/ sameresourceinallotherfolders.xml

,它应该相应地更改内容来看,当您更改地区

设计一个灵活的布局

如果您需要重新安排布局,以适应特定的语言翻译年龄(对于 示例德语及其长词),则可以为该语言(例如res/layout-de/main.xml)创建替代 布局。 但是,这样做会使应用程序难以维护。它 更好地创建一个更灵活的单一布局。

另一种典型情况是需要某种 的布局不同的语言。例如,您可能有一个联系表格 ,当应用程序以 日语运行时应该包含两个名称字段,但应用程序以某种 其他语言运行时应包含三个名称字段。你可以用两种方式处理这个问题:

与现场您可以通过编程启用或禁用 创建一个布局的基础上,语言,或是主要布局包括 另一个布局,包括多变的领域。第二个布局 可以针对不同的语言具有不同的配置。避免 创建比您需要的更多的资源文件和文本字符串

您可能不需要为应用程序中的每个资源创建一个特定于语言环境的替代方案 。例如,在 res/layout/main.xml文件中定义的布局可以在任何语言环境中工作,在这种情况下 就不需要创建任何替代布局文件。

此外,您可能不需要为每个字符串创建替代文本。 例如,假设以下内容:

您的应用程序的默认语言是美式英语。应用程序使用的每个字符串 都是使用美式英语 拼写在res/values/strings.xml中定义的。对于一些重要的词组,您想提供英式英语拼写。当您的应用程序在英国的 设备上运行时,您希望使用这些替代 字符串。为此,您可以创建一个名为 res/values-en-rGB/strings.xml的小文件,该文件仅包含 应该在英国运行时不同的字符串。对于所有其他字符串, 应用程序将回退到默认值 并使用res/values/strings.xml中定义的内容。

使用手动区域查找了Android Context对象

您可以使用上下文对象,Android可以 可查找的语言环境。

string地区= context.getResources()getConfiguration() .locale.getDisplayName();

+0

我试过不设置内容查看没有工作,你必须调用的setContentView(),但我总是喜欢官方文档qoutes :) –

+0

你需要在OnCreate中功能的setContentView一次 - 那么如果你改变了语言环境,内容查看应根据语言环境进行更改 –