- 浏览: 10344 次
- 性别:
- 来自: 杭州
最新评论
只是进项简单的手动切换方法,希望有所帮助。
前面的String.xml和一些布局文件就略过了。直接上主代码:
BaseActivity类:
MainActivity类:
工具类PreferenceUtil:
SettingActivity的布局文件:
前面的String.xml和一些布局文件就略过了。直接上主代码:
package info.btsland.app.ui.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import info.btsland.app.R; import info.btsland.app.ui.fragment.HeadFragment; import info.btsland.app.util.PreferenceUtil; public class SettingActivity extends BaseActivity { private TextView tvSetLanguage; private TextView tvSetTheme; private TextView tvSetGuide; private TextView tvSetWe; private TextView tvSetEdition; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(info.btsland.app.R.layout.activity_setting); fillInHead(); init(); } /** * 初始化 */ private void init(){ tvSetLanguage= (TextView) findViewById(R.id.tv_set_language); tvSetTheme= (TextView) findViewById(R.id.tv_set_theme); tvSetGuide= (TextView) findViewById(R.id.tv_set_guide); tvSetWe= (TextView) findViewById(R.id.tv_set_we); tvSetEdition= (TextView) findViewById(R.id.tv_set_edition); //绑定特效事件 TextViewOnTouchListener OnTouchListener=new TextViewOnTouchListener(); tvSetLanguage.setOnTouchListener(OnTouchListener); tvSetTheme.setOnTouchListener(OnTouchListener); tvSetGuide.setOnTouchListener(OnTouchListener); tvSetWe.setOnTouchListener(OnTouchListener); tvSetEdition.setOnTouchListener(OnTouchListener); //绑定点击事件 TextViewOnClickListener OnClickListener=new TextViewOnClickListener(); tvSetLanguage.setOnClickListener(OnClickListener); //判断checkedItem的值 String lo = PreferenceUtil.getString("language", "zh"); Log.i("init", "init: "+lo); if (lo.equals("zh")){ index=0; }else if (lo.equals("en")){ index=1; } Log.i("init", "init: "+index); } /* *点击事件 */ class TextViewOnClickListener implements View.OnClickListener{ @Override public void onClick(View view) { switch (view.getId()){ case R.id.tv_set_language: showListDialog(); break; case R.id.tv_set_theme: break; } } } /** * 跳出Dialog窗口 */ int index = 0 ;//设置默认选项,作为checkedItem参数传入。 private void showListDialog() { AlertDialog.Builder listDialog = new AlertDialog.Builder(SettingActivity.this); listDialog.setTitle(getString(R.string.selectlanguage)); listDialog.setIcon(android.R.drawable.ic_dialog_info); final String[] items={"中文","英文"}; items[0]=getString(R.string.stringzh); items[1]=getString(R.string.stringen); listDialog.setSingleChoiceItems(items, index, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(items[which]==getString(R.string.stringzh)){ switchLanguage("zh"); }else if(items[which]==getString(R.string.stringen)){ switchLanguage("en"); } dialog.dismiss(); finish(); Intent intent=new Intent(SettingActivity.this,MainActivity.class); //开始新的activity同时移除之前所有的activity intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } }); listDialog.show(); } /** * 单击特效 * @param textView 被单击的tv * @param motionEvent 当前状态 */ protected void touchColor(TextView textView,MotionEvent motionEvent){ if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { textView.setBackground(getResources().getDrawable(R.drawable.tv_row_touch,null)); } if (motionEvent.getAction() == MotionEvent.ACTION_UP) { textView.setBackground(getResources().getDrawable(R.drawable.tv_row,null)); } } class TextViewOnTouchListener implements View.OnTouchListener{ @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (view.getId()) { case R.id.tv_set_language: touchColor(tvSetLanguage,motionEvent); break; case R.id.tv_set_theme: touchColor(tvSetTheme,motionEvent); break; } return false; } } }
BaseActivity类:
package info.btsland.app.ui.activity; import android.app.Activity; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import java.util.Locale; import info.btsland.app.util.PreferenceUtil; /** * Created by Administrator on 2017/10/13 0013. */ public class BaseActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * <切换语言> * * @param language */ protected void switchLanguage(String language) { // 设置应用语言类型 Resources resources = getResources(); Configuration config = resources.getConfiguration(); DisplayMetrics dm = resources.getDisplayMetrics(); if (language.equals("en")){ config.locale = Locale.ENGLISH; }else{ config.locale = Locale.SIMPLIFIED_CHINESE; } resources.updateConfiguration(config, dm); // 保存设置语言的类型 PreferenceUtil.commitString("language",language); } }
MainActivity类:
package info.btsland.app.ui.activity; import info.btsland.app.util.PreferenceUtil; public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化PreferenceUtil PreferenceUtil.init(this); // 依据上次的语言设置,又一次设置语言 switchLanguage(PreferenceUtil.getString("language", "zh")); setContentView(R.layout.activity_main); fillInHead(); }
工具类PreferenceUtil:
package info.btsland.app.util; import android.content.Context; import android.content.SharedPreferences; public class PreferenceUtil { private static SharedPreferences mSharedPreferences = null; private static SharedPreferences.Editor mEditor = null; public static void init(Context context){ if (null == mSharedPreferences) { mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ; } } public static void removeKey(String key){ mEditor = mSharedPreferences.edit(); mEditor.remove(key); mEditor.commit(); } public static void removeAll(){ mEditor = mSharedPreferences.edit(); mEditor.clear(); mEditor.commit(); } public static void commitString(String key, String value){ mEditor = mSharedPreferences.edit(); mEditor.putString(key, value); mEditor.commit(); } public static String getString(String key, String faillValue){ return mSharedPreferences.getString(key, faillValue); } public static void commitInt(String key, int value){ mEditor = mSharedPreferences.edit(); mEditor.putInt(key, value); mEditor.commit(); } public static int getInt(String key, int failValue){ return mSharedPreferences.getInt(key, failValue); } public static void commitLong(String key, long value){ mEditor = mSharedPreferences.edit(); mEditor.putLong(key, value); mEditor.commit(); } public static long getLong(String key, long failValue) { return mSharedPreferences.getLong(key, failValue); } public static void commitBoolean(String key, boolean value){ mEditor = mSharedPreferences.edit(); mEditor.putBoolean(key, value); mEditor.commit(); } public static Boolean getBoolean(String key, boolean failValue){ return mSharedPreferences.getBoolean(key, failValue); } }
SettingActivity的布局文件:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_Grey" tools:context="info.btsland.app.ui.activity.UserActivity"> <View android:id="@+id/v_set_back" android:layout_width="0dp" android:layout_height="200dp" android:background="@drawable/welcome2" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/fra_set_head" app:layout_constraintHorizontal_bias="0.0" /> <TextView android:id="@+id/tv_set_language" android:layout_width="0dp" android:layout_height="40dp" android:text="@string/language" android:gravity="center" android:layout_margin="5dp" android:background="@drawable/tv_row" android:textColor="@color/color_white" app:layout_constraintTop_toBottomOf="@+id/v_set_back" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_marginTop="5dp" /> <TextView android:id="@+id/tv_set_theme" android:layout_width="0dp" android:layout_height="40dp" android:text="@string/theme" android:gravity="center" android:layout_margin="5dp" android:background="@drawable/tv_row" android:textColor="@color/color_white" app:layout_constraintTop_toBottomOf="@+id/tv_set_language" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </android.support.constraint.ConstraintLayout>
相关推荐
首先,我们需要理解Android系统语言切换的基本原理。Android系统语言的设置存储在`res/values/strings.xml`等资源文件中,每种语言都有对应的资源文件夹,如`res/values-en/strings.xml`(英文)和`res/values-zh-...
首先,理解Android系统语言切换的基本原理。Android系统通过资源的配置文件(res/values/strings.xml等)来支持多种语言。每种语言都有相应的资源文件夹,如res/values-en/strings.xml对应英语,res/values-zh-rCN/...
总之,Android系统语言的设置涉及到对`Locale`对象的创建和使用,以及对`Resources`的更新。在实际应用中,如微信,通常会在应用内实现局部语言切换,而系统级别的语言更改需要特殊权限。理解这些原理和方法,有助于...
### Android系统语言切换监听与设置实例代码知识点解析 #### 一、动态设置应用语言 在Android开发中,应用的语言设置通常是通过系统的`Locale`和`Configuration`类实现的。代码中动态设置应用显示语言的方式是通过...
总结起来,Android多语言切换主要涉及创建不同语言的values目录,定义字符串资源,更新用户偏好,以及在应用启动时动态调整系统语言。通过以上步骤,你的应用就能轻松实现多语言切换,满足全球用户的使用需求。在...
总的来说,实现Android系统语言切换功能需要深入理解Android系统内部工作原理,利用反射等技术来操作系统级配置,同时要考虑用户体验、兼容性和权限管理等多个方面。虽然过程复杂,但通过精心设计和测试,开发者可以...
首先,Android系统语言的切换涉及到`Resources`和`Locale`这两个核心类。`Resources`是Android中用于获取应用资源的接口,而`Locale`代表了语言区域设置,例如"zh_CN"代表简体中文,"en_US"代表美式英语。 1. **...
在Android应用开发中,实现多语言切换是一项重要的功能,它能帮助应用触及更广泛的用户群体。本项目基于Android Studio开发环境,使用SDK版本28,确保兼容Android 8.0(API级别26)及以上版本。以下是关于Android多...
Android系统支持多种语言,开发者可以在项目中添加不同语言的资源文件以实现多语言支持。这些资源文件通常位于`res/values`目录下,以`strings.xml`文件形式存在。例如,为了支持英文,可以创建`values-en`目录,...
由于Android系统不会自动处理运行时的语言切换,我们需要在每个Activity的`onCreate()`方法中检测并应用当前的语言设置: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...
本项目"android多语言切换"提供了一个示例——LocaleChangeDemo,它演示了如何在Android系统中轻松地在中文和英文之间进行切换。下面我们将深入探讨这个主题,解析实现多语言切换的关键知识点。 首先,我们需要理解...
1. **资源本地化**: Android系统通过资源文件夹来实现本地化,如`res/values/strings.xml`用于存储英文资源,而`res/values-fr/strings.xml`则用于存储法文资源。每个语言都有对应的资源文件夹,文件夹名格式为`...
在Android应用开发中,实现多语言切换是一项基本且重要的功能,尤其对于面向全球用户的App来说。这个"Android 多语言切换demo"就是针对这一需求的一个示例项目,它可以帮助开发者理解并实现应用的语言本地化。下面...
Android系统默认使用设备的语言设置,但我们可以手动更改应用的语言。这需要通过`Resources`类的`updateConfiguration()`方法,或者使用`ContextWrapper`的`createConfigurationContext()`来创建一个新的配置上下文...
首先,我们需要理解Android系统如何处理语言资源。Android使用资源文件夹来存储不同语言的文本,通常位于`res/values`目录下。对于不同的语言,我们会创建对应的子目录,如`res/values-en`用于英文,`res/values-zh-...
Android系统基于资源的本地化,也就是说,开发者需要为每种语言创建相应的资源文件夹。对于中文,通常有`values-zh-rCN`(简体中文)和`values-zh-rTW`(繁体中文),而英文则对应`values-en`。在这些文件夹内,你...
当语言切换时,Android系统默认会销毁并重建Activity以加载新的资源。如果需要避免这个行为,可以使用`onSaveInstanceState(Bundle)`来保存状态,并在`onCreate(Bundle)`或`onRestoreInstanceState(Bundle)`中恢复...