2013-04-18 93 views
1

我想在发生更改语言时执行某些操作。所以我把对活动的Manifest.xml在属性的Andorid:configCahnges区域:为什么没有为android:configChanges =“locale”调用onConfigurationchanged?

 <activity 
     android:name=".MainActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize|locale" 
     android:hardwareAccelerated="true" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter>   
     </intent-filter> 
    </activity> 

但是当我运行我的应用程序,并进入设置和更改语言的方法onConfigurationchanged不MainAcitvity调用。为什么?对于android文档说,它应该。 我开发为API 16.

我发现,如果我把android:configChanges添加到layoutDirection并设置android:minSdkVersion="17"该方法被调用。 (我在4.2.2上运行应用程序)

但现在我无法将文本刷新为新语言。 我尝试拨打:

getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
在onConfigurationChanged但没有成功

。 :(

+0

我想你想改变设备的语言,并根据你想改变的语言来改变你的应用程序的语言。是这样吗? – GrIsHu 2013-04-18 07:48:04

+1

'android:configChanges'方法用于管理你的活动,以防止在设备中更改方向,SoftKeyboard是开放等..要改变您的应用程序的区域设置您必须在应用程序的'res/values'文件夹中为相关语言定义其资源值。 – GrIsHu 2013-04-18 07:52:10

+0

@Grishu我不想从应用程序中更改语言。我想对此作出反应(例如,用户更改语言) 我想使用android的标准机制进行翻译,但我不想在用户更改语言时使用onDestroy()。 – LunaVulpo 2013-04-18 09:46:14

回答

0

你必须定义的android:configChanges = “的layoutDirection |区域设置”,以便onConfigurationChanged()被调用

0
 android:configChanges="locale|layoutDirection" 

工作4.4

相关问题