`
wenweijie
  • 浏览: 10344 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android 系统语言切换

 
阅读更多
只是进项简单的手动切换方法,希望有所帮助。

前面的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系统语言切换的基本原理。Android系统语言的设置存储在`res/values/strings.xml`等资源文件中,每种语言都有对应的资源文件夹,如`res/values-en/strings.xml`(英文)和`res/values-zh-...

    Android切换系统语言

    首先,理解Android系统语言切换的基本原理。Android系统通过资源的配置文件(res/values/strings.xml等)来支持多种语言。每种语言都有相应的资源文件夹,如res/values-en/strings.xml对应英语,res/values-zh-rCN/...

    android设置系统语言

    总之,Android系统语言的设置涉及到对`Locale`对象的创建和使用,以及对`Resources`的更新。在实际应用中,如微信,通常会在应用内实现局部语言切换,而系统级别的语言更改需要特殊权限。理解这些原理和方法,有助于...

    Android 系统语言切换监听和设置实例代码

    ### Android系统语言切换监听与设置实例代码知识点解析 #### 一、动态设置应用语言 在Android开发中,应用的语言设置通常是通过系统的`Locale`和`Configuration`类实现的。代码中动态设置应用显示语言的方式是通过...

    Android多语言切换(国际化)

    总结起来,Android多语言切换主要涉及创建不同语言的values目录,定义字符串资源,更新用户偏好,以及在应用启动时动态调整系统语言。通过以上步骤,你的应用就能轻松实现多语言切换,满足全球用户的使用需求。在...

    Android实现系统语言切换功能

    总的来说,实现Android系统语言切换功能需要深入理解Android系统内部工作原理,利用反射等技术来操作系统级配置,同时要考虑用户体验、兼容性和权限管理等多个方面。虽然过程复杂,但通过精心设计和测试,开发者可以...

    代码设置android系统语言Demo

    首先,Android系统语言的切换涉及到`Resources`和`Locale`这两个核心类。`Resources`是Android中用于获取应用资源的接口,而`Locale`代表了语言区域设置,例如"zh_CN"代表简体中文,"en_US"代表美式英语。 1. **...

    Android 多语言 切换

    在Android应用开发中,实现多语言切换是一项重要的功能,它能帮助应用触及更广泛的用户群体。本项目基于Android Studio开发环境,使用SDK版本28,确保兼容Android 8.0(API级别26)及以上版本。以下是关于Android多...

    Android语言切换Demo

    Android系统支持多种语言,开发者可以在项目中添加不同语言的资源文件以实现多语言支持。这些资源文件通常位于`res/values`目录下,以`strings.xml`文件形式存在。例如,为了支持英文,可以创建`values-en`目录,...

    android 多语言切换

    由于Android系统不会自动处理运行时的语言切换,我们需要在每个Activity的`onCreate()`方法中检测并应用当前的语言设置: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...

    android多语言切换

    本项目"android多语言切换"提供了一个示例——LocaleChangeDemo,它演示了如何在Android系统中轻松地在中文和英文之间进行切换。下面我们将深入探讨这个主题,解析实现多语言切换的关键知识点。 首先,我们需要理解...

    android 实现多国语言的切换

    1. **资源本地化**: Android系统通过资源文件夹来实现本地化,如`res/values/strings.xml`用于存储英文资源,而`res/values-fr/strings.xml`则用于存储法文资源。每个语言都有对应的资源文件夹,文件夹名格式为`...

    Android 多语言切换demo

    在Android应用开发中,实现多语言切换是一项基本且重要的功能,尤其对于面向全球用户的App来说。这个"Android 多语言切换demo"就是针对这一需求的一个示例项目,它可以帮助开发者理解并实现应用的语言本地化。下面...

    android手动多国语言切换

    Android系统默认使用设备的语言设置,但我们可以手动更改应用的语言。这需要通过`Resources`类的`updateConfiguration()`方法,或者使用`ContextWrapper`的`createConfigurationContext()`来创建一个新的配置上下文...

    Android 应用语言切换

    首先,我们需要理解Android系统如何处理语言资源。Android使用资源文件夹来存储不同语言的文本,通常位于`res/values`目录下。对于不同的语言,我们会创建对应的子目录,如`res/values-en`用于英文,`res/values-zh-...

    android应用内和系统设置两种设置多语言国际化

    Android系统基于资源的本地化,也就是说,开发者需要为每种语言创建相应的资源文件夹。对于中文,通常有`values-zh-rCN`(简体中文)和`values-zh-rTW`(繁体中文),而英文则对应`values-en`。在这些文件夹内,你...

    android APP 多语言切换

    当语言切换时,Android系统默认会销毁并重建Activity以加载新的资源。如果需要避免这个行为,可以使用`onSaveInstanceState(Bundle)`来保存状态,并在`onCreate(Bundle)`或`onRestoreInstanceState(Bundle)`中恢复...

Global site tag (gtag.js) - Google Analytics