在我的应用程序中,我有两个 Activity,一个可以向两侧旋转,另一个被锁定在横向模式。
以下是我的 list 文件详细信息,其中添加了 Activity
<activity
android:name="com.hogaming.android.Activities.LoginActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
<activity
android:name="com.android.activities.MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
在我使用微调器的登录 Activity 中,我正在更改语言环境并更新整个编辑文本和按钮文本。 在按钮单击操作中,我正在更新 UI View ,当我旋转设备时,英语语言环境设置在更新的 View 上 这是我的全部代码
public class LoginActivity extends Activity
{
Locale locale = null;
Spinner langSpinner;
private SharedPreferences langPrefs;
String langSelected = "";
int langPosition = 0;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.loginscreen);
langPrefs = PreferenceManager.getDefaultSharedPreferences(this);
langSelected = langPrefs.getString(langPrefKey, "");
langPosition = langPrefs.getInt(langPosKey, 0);
langSpinner = (Spinner)this.findViewById(R.id.lanuage_spinner1);
langSpinner.setSelection(langPosition);
langSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3)
{
if (pos == 0)
{
langSelected ="en";
locale = Locale.ENGLISH;
}
else if (pos == 1)
{
langSelected ="it";
locale = Locale.ITALIAN;
}
else if (pos == 2)
{
langSelected ="zh";
locale = Locale.SIMPLIFIED_CHINESE;
}
else if (pos == 3)
{
langSelected ="zh-rTW";
locale = Locale.TRADITIONAL_CHINESE;
}
changeLang(langSelected, pos);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
btnLogin = (Button) this.findViewById(R.id.LoginButton);
btnLogin.setOnClickListener(new ButtonClickListener());
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
this.finish();
}
@Override
protected void onDestroy()
{
super.onDestroy();
this.finish();
}
public class ButtonClickListener implements OnClickListener {
public void onClick(View v) {
final LoginTask validateTask = new LoginTask(context, usernameField.getText().toString(), passwordField.getText().toString());
validateTask.execute();
}
// Hide the keyboard
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(passwordField.getWindowToken(), 0);
}
public class LoginTask extends AsyncTask<Void, Void, String>
{
protected LoginActivity context;
protected Exception exception;
private String username;
private String password;
public LoginTask(LoginActivity context, String uname, String pwd) {
this.context = context;
this.username = uname;
this.password = pwd;
}
@Override
protected String doInBackground(Void... params) {
try
{
return HTTPHelper.LoginTaskData(this.context, username, password);
}
catch (Exception e)
{
exception = e;
Log.e(TAG, "Login Task Error", e);
}
return null;
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
Log.e(TAG, "LoginTask: " + result);
if (result.equals("true"))
{
// moves to next activity
}
else if (result.equals("false"))
{
//showing an alert textview with selected language text
}
}
}
public void changeLang(String lang, int pos)
{
if (lang.length() != 0)
{
saveLocale(lang, pos, locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
updateTexts();
}
}
public void saveLocale(String lang, int pos, Locale locale)
{
SharedPreferences.Editor editor1 = langPrefs.edit();
editor1.remove(langPrefKey);
editor1.remove(langPosKey);
editor1.commit();
SharedPreferences.Editor editor = langPrefs.edit();
editor.putString(langPrefKey, lang);
editor.putInt(langPosKey, pos);
editor.commit();
langSelected = langPrefs.getString(langPrefKey, "");
langPosition = langPrefs.getInt(langPosKey, 0);
}
private void updateTexts()
{
// here i will once again set all textview String values, it changes to the selected language
}
@Override
public void onConfigurationChanged(android.content.res.Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (locale != null){
newConfig.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
}
最佳答案
如果我没理解错的话,问题是当你切换屏幕方向时手机的语言环境会恢复,尽管你有 android:configChanges="orientation|screenSize|keyboardHidden",在你的 AndroidManifest.xml。如果我在你身边,我会从不同的角度处理这个问题。我会摆脱 android:configChanges,让 android 在方向改变时重新启动 Activity。然后,我将使用 onSaveInstanceState 对来保存用户在 Spinner 中选择的 Locale。当 onCreate 再次被调用时,你知道由于方向改变而被调用,因为 bundle 不为空,读取存储的 Locale 并重新启动,并再次更新配置。例如
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable("LOCALE", locale);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginscreen);
if (savedInstanceState != null) {
locale = (Locale) savedInstanceState.getSerializable("LOCALE");
if (locale != null) {
// update the configuration
}
}
关于方向变化的android语言环境变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30123357/
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
在启用Rack::Deflater来gzip我的响应主体时偶然发现了一些奇怪的东西。也许我遗漏了一些东西,但启用此功能后,响应被压缩,但是资源的ETag在每个请求上都会发生变化。这会强制应用程序每次都响应,而不是发送304。这在没有启用Rack::Deflater的情况下有效,我已经验证页面源没有改变。我正在运行一个使用thin作为Web服务器的Rails应用程序。Gemfile.lockhttps://gist.github.com/2510816有没有什么方法可以让我从Rack中间件获得更多的输出,这样我就可以看到发生了什么?提前致谢。 最佳答案
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge
从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby