Skip to content

Commit 2f35fe7

Browse files
committed
修改框架供外部调用的类名名称
修复在某些机型上面频繁切语种导致失效的问题
1 parent 36016e5 commit 2f35fe7

File tree

11 files changed

+257
-225
lines changed

11 files changed

+257
-225
lines changed

MultiLanguages.apk

941 KB
Binary file not shown.

README.md

Lines changed: 89 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,122 @@
11
# 国际化框架
22

3+
> 码云地址:[Gitee](https://gitee.com/getActivity/MultiLanguages)
4+
5+
> [点击此处下载Demo](MultiLanguages.apk)
6+
37
![](MultiLanguages.gif)
48

59
#### 集成步骤
610

7-
dependencies {
8-
implementation 'com.hjq:language:3.0'
9-
}
11+
```groovy
12+
dependencies {
13+
implementation 'com.hjq:language:5.0'
14+
}
15+
```
1016

1117
#### 初始化框架
1218

13-
// 在 Application 中初始化
14-
LanguagesManager.init(this);
19+
```java
20+
// 在 Application 中初始化
21+
MultiLanguages.init(this);
22+
```
1523

1624
> 重写 Application 的 attachBaseContext 方法
1725
18-
@Override
19-
protected void attachBaseContext(Context base) {
20-
// 国际化适配(绑定语种)
21-
super.attachBaseContext(LanguagesManager.attach(base));
22-
}
26+
```java
27+
@Override
28+
protected void attachBaseContext(Context base) {
29+
// 国际化适配(绑定语种)
30+
super.attachBaseContext(MultiLanguages.attach(base));
31+
}
32+
```
2333

2434
> 重写**基类** BaseActivity 的 attachBaseContext 方法
2535
26-
@Override
27-
protected void attachBaseContext(Context newBase) {
28-
// 国际化适配(绑定语种)
29-
super.attachBaseContext(LanguagesManager.attach(newBase));
30-
}
36+
```java
37+
@Override
38+
protected void attachBaseContext(Context newBase) {
39+
// 国际化适配(绑定语种)
40+
super.attachBaseContext(MultiLanguages.attach(newBase));
41+
}
42+
```
3143

3244
> 只要是 Context 的子类都需要重写,Service 也雷同,这里不再赘述
3345
3446
#### 语种设置
3547

36-
// 设置当前的语种(返回 true 需要重启 App)
37-
LanguagesManager.setAppLanguage(Context context, Locale locale);
38-
39-
// 获取当前的语种
40-
LanguagesManager.getAppLanguage(Context context);
48+
```java
49+
// 设置当前的语种(返回 true 需要重启 App)
50+
MultiLanguages.setAppLanguage(Context context, Locale locale);
51+
52+
// 获取当前的语种
53+
MultiLanguages.getAppLanguage(Context context);
54+
```
4155

4256
#### 使用案例
4357

44-
@Override
45-
public void onClick(View v) {
46-
// 是否需要重启
47-
boolean restart;
48-
switch (v.getId()) {
49-
// 跟随系统
50-
case R.id.btn_language_auto:
51-
restart = LanguagesManager.setSystemLanguage(this);
52-
break;
53-
// 简体中文
54-
case R.id.btn_language_cn:
55-
restart = LanguagesManager.setAppLanguage(this, Locale.CHINA);
56-
break;
57-
// 繁体中文
58-
case R.id.btn_language_tw:
59-
restart = LanguagesManager.setAppLanguage(this, Locale.TAIWAN);
60-
break;
61-
// 英语
62-
case R.id.btn_language_en:
63-
restart = LanguagesManager.setAppLanguage(this, Locale.ENGLISH);
64-
break;
65-
default:
66-
restart = false;
67-
break;
68-
}
69-
70-
if (restart) {
71-
// 我们可以充分运用 Activity 跳转动画,在跳转的时候设置一个渐变的效果
72-
startActivity(new Intent(this, LanguageActivity.class));
73-
overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out);
74-
finish();
75-
}
58+
```java
59+
@Override
60+
public void onClick(View v) {
61+
// 是否需要重启
62+
boolean restart;
63+
switch (v.getId()) {
64+
// 跟随系统
65+
case R.id.btn_language_auto:
66+
restart = MultiLanguages.setSystemLanguage(this);
67+
break;
68+
// 简体中文
69+
case R.id.btn_language_cn:
70+
restart = MultiLanguages.setAppLanguage(this, Locale.CHINA);
71+
break;
72+
// 繁体中文
73+
case R.id.btn_language_tw:
74+
restart = MultiLanguages.setAppLanguage(this, Locale.TAIWAN);
75+
break;
76+
// 英语
77+
case R.id.btn_language_en:
78+
restart = MultiLanguages.setAppLanguage(this, Locale.ENGLISH);
79+
break;
80+
default:
81+
restart = false;
82+
break;
83+
}
84+
85+
if (restart) {
86+
// 我们可以充分运用 Activity 跳转动画,在跳转的时候设置一个渐变的效果
87+
startActivity(new Intent(this, LanguageActivity.class));
88+
overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out);
89+
finish();
7690
}
91+
}
92+
```
7793

7894
#### 其他 API
7995

80-
// 将 App 语种设置为系统语种(返回 true 需要重启 App)
81-
LanguagesManager.setSystemLanguage(Context context);
82-
// 获取系统的语种
83-
LanguagesManager.getSystemLanguage();
84-
85-
// 对比两个语言是否是同一个语种(比如:中文的简体和繁体,英语的美式和英式)
86-
LanguagesManager.equalsLanguage(Locale locale1, Locale locale2);
87-
// 对比两个语言是否是同一个地方的(比如:中国大陆用的中文简体,中国台湾用的中文繁体)
88-
LanguagesManager.equalsCountry(Locale locale1, Locale locale2);
89-
90-
// 获取某个语种下的 String
91-
LanguagesManager.getLanguageString(Context context, Locale locale, int stringId);
92-
// 获取某个语种下的 Resources 对象
93-
LanguagesManager.getLanguageResources(Context context, Locale locale);
94-
95-
#### 混淆规则
96-
97-
-keep class com.hjq.language.** {*;}
96+
```java
97+
// 将 App 语种设置为系统语种(返回 true 需要重启 App)
98+
MultiLanguages.setSystemLanguage(Context context);
99+
// 获取系统的语种
100+
MultiLanguages.getSystemLanguage();
101+
102+
// 对比两个语言是否是同一个语种(比如:中文的简体和繁体,英语的美式和英式)
103+
MultiLanguages.equalsLanguage(Locale locale1, Locale locale2);
104+
// 对比两个语言是否是同一个地方的(比如:中国大陆用的中文简体,中国台湾用的中文繁体)
105+
MultiLanguages.equalsCountry(Locale locale1, Locale locale2);
106+
107+
// 获取某个语种下的 String
108+
MultiLanguages.getLanguageString(Context context, Locale locale, int stringId);
109+
// 获取某个语种下的 Resources 对象
110+
MultiLanguages.getLanguageResources(Context context, Locale locale);
111+
```
98112

99113
#### 作者的其他开源项目
100114

101-
* 架构工程:[AndroidProject](https://github.com/getActivity/AndroidProject)
115+
* 安卓架构:[AndroidProject](https://github.com/getActivity/AndroidProject)
116+
117+
* 网络框架:[EasyHttp](https://github.com/getActivity/EasyHttp)
118+
119+
* 日志框架:[Logcat](https://github.com/getActivity/Logcat)
102120

103121
* 权限框架:[XXPermissions](https://github.com/getActivity/XXPermissions)
104122

app/build.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.hjq.language.demo"
88
minSdkVersion 14
99
targetSdkVersion 28
10-
versionCode 30
11-
versionName "3.0"
10+
versionCode 50
11+
versionName "5.0"
1212
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1313
}
1414
buildTypes {
@@ -24,10 +24,11 @@ dependencies {
2424
implementation project(':library')
2525

2626
implementation 'com.android.support:appcompat-v7:28.0.0'
27-
implementation 'com.android.support:design:28.0.0'
2827

2928
// 标题栏:https://github.com/getActivity/TitleBar
30-
implementation 'com.hjq:titlebar:6.0'
29+
implementation 'com.hjq:titlebar:8.0'
3130
// 吐司工具类:https://github.com/getActivity/ToastUtils
32-
implementation 'com.hjq:toast:8.0'
31+
implementation 'com.hjq:toast:8.8'
32+
// 内存泄漏捕捉:https://github.com/square/leakcanary
33+
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
3334
}

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
android:label="@string/app_name"
99
android:roundIcon="@mipmap/ic_launcher_round"
1010
android:theme="@style/AppTheme">
11-
<activity android:name=".LanguageActivity">
11+
<activity
12+
android:name=".LanguageActivity"
13+
android:configChanges="orientation|screenSize|keyboardHidden"
14+
android:screenOrientation="portrait">
1215
<intent-filter>
1316
<action android:name="android.intent.action.MAIN" />
1417
<action android:name="android.intent.action.VIEW" />
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.hjq.language.demo;
22

33
import android.content.Context;
4-
import android.content.res.Configuration;
54
import android.support.v7.app.AppCompatActivity;
65

7-
import com.hjq.language.LanguagesManager;
6+
import com.hjq.language.MultiLanguages;
87

98
public abstract class BaseActivity extends AppCompatActivity {
109

1110
@Override
1211
protected void attachBaseContext(Context newBase) {
1312
// 国际化适配(绑定语种)
14-
super.attachBaseContext(LanguagesManager.attach(newBase));
13+
super.attachBaseContext(MultiLanguages.attach(newBase));
1514
}
1615
}

app/src/main/java/com/hjq/language/demo/BaseApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import android.app.Application;
44
import android.content.Context;
55

6-
import com.hjq.language.LanguagesManager;
6+
import com.hjq.language.MultiLanguages;
77
import com.hjq.toast.ToastUtils;
88

99
public class BaseApplication extends Application {
@@ -13,12 +13,12 @@ public void onCreate() {
1313
super.onCreate();
1414
ToastUtils.init(this);
1515
// 在 Application 中初始化
16-
LanguagesManager.init(this);
16+
MultiLanguages.init(this);
1717
}
1818

1919
@Override
2020
protected void attachBaseContext(Context base) {
2121
// 国际化适配(绑定语种)
22-
super.attachBaseContext(LanguagesManager.attach(base));
22+
super.attachBaseContext(MultiLanguages.attach(base));
2323
}
2424
}

app/src/main/java/com/hjq/language/demo/LanguageActivity.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import android.view.View;
66
import android.widget.TextView;
77

8-
import com.hjq.language.LanguagesManager;
8+
import com.hjq.language.MultiLanguages;
99
import com.hjq.toast.ToastUtils;
1010

1111
import java.util.Locale;
@@ -23,14 +23,14 @@ protected void onCreate(Bundle savedInstanceState) {
2323
findViewById(R.id.btn_language_tw).setOnClickListener(this);
2424
findViewById(R.id.btn_language_en).setOnClickListener(this);
2525

26-
((TextView) findViewById(R.id.tv_language_system)).setText(LanguagesManager.getLanguageString(this, LanguagesManager.getSystemLanguage(), R.string.current_language));
26+
((TextView) findViewById(R.id.tv_language_system)).setText(MultiLanguages.getLanguageString(this, MultiLanguages.getSystemLanguage(), R.string.current_language));
2727

28-
Locale locale = LanguagesManager.getAppLanguage(this);
29-
if (LanguagesManager.equalsCountry(locale, Locale.CHINA)) {
28+
Locale locale = MultiLanguages.getAppLanguage(this);
29+
if (MultiLanguages.equalsCountry(locale, Locale.CHINA)) {
3030
ToastUtils.show("简体");
31-
} else if (LanguagesManager.equalsCountry(locale, Locale.TAIWAN)) {
31+
} else if (MultiLanguages.equalsCountry(locale, Locale.TAIWAN)) {
3232
ToastUtils.show("繁体");
33-
} else if (LanguagesManager.equalsLanguage(locale, Locale.ENGLISH)) {
33+
} else if (MultiLanguages.equalsLanguage(locale, Locale.ENGLISH)) {
3434
ToastUtils.show("英语");
3535
} else {
3636
ToastUtils.show("未知语种");
@@ -47,19 +47,19 @@ public void onClick(View v) {
4747
switch (v.getId()) {
4848
// 跟随系统
4949
case R.id.btn_language_auto:
50-
restart = LanguagesManager.setSystemLanguage(this);
50+
restart = MultiLanguages.setSystemLanguage(this);
5151
break;
5252
// 简体中文
5353
case R.id.btn_language_cn:
54-
restart = LanguagesManager.setAppLanguage(this, Locale.CHINA);
54+
restart = MultiLanguages.setAppLanguage(this, Locale.CHINA);
5555
break;
5656
// 繁体中文
5757
case R.id.btn_language_tw:
58-
restart = LanguagesManager.setAppLanguage(this, Locale.TAIWAN);
58+
restart = MultiLanguages.setAppLanguage(this, Locale.TAIWAN);
5959
break;
6060
// 英语
6161
case R.id.btn_language_en:
62-
restart = LanguagesManager.setAppLanguage(this, Locale.ENGLISH);
62+
restart = MultiLanguages.setAppLanguage(this, Locale.ENGLISH);
6363
break;
6464
default:
6565
restart = false;
@@ -68,11 +68,11 @@ public void onClick(View v) {
6868

6969
if (restart) {
7070
// 1.使用recreate来重启Activity的效果差,有闪屏的缺陷
71-
//recreate();
71+
// recreate();
7272

7373
// 2.使用常规startActivity来重启Activity,有从左向右的切换动画,稍微比recreate的效果好一点,但是这种并不是最佳的效果
74-
//startActivity(new Intent(this, LanguageActivity.class));
75-
//finish();
74+
// startActivity(new Intent(this, LanguageActivity.class));
75+
// finish();
7676

7777
// 3.我们可以充分运用 Activity 跳转动画,在跳转的时候设置一个渐变的效果,相比前面的两种带来的体验是最佳的
7878
startActivity(new Intent(this, LanguageActivity.class));

library/build.gradle

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
//文件开头配置
21
apply plugin: 'com.android.library'
32
apply plugin: 'com.novoda.bintray-release'
43

@@ -7,22 +6,21 @@ android {
76

87
defaultConfig {
98
minSdkVersion 14
10-
targetSdkVersion 26
11-
versionCode 30
12-
versionName "3.0"
9+
versionCode 50
10+
versionName "5.0"
1311
}
1412
}
1513

1614
publish {
17-
userOrg = 'getactivity'//填写bintray用户名,注意大小写
18-
groupId = 'com.hjq'//定义的maven group id最终引用形式
19-
artifactId = 'language'//maven的artifact id
20-
version = '3.0'//maven 上发布版本号
21-
description = 'Android Multi Languages Adaptation Framework'//描述,自己定义
22-
website = "https://github.com/getActivity/MultiLanguages"//项目在github中的地址
15+
userOrg = 'getactivity'
16+
groupId = 'com.hjq'
17+
artifactId = 'language'
18+
version = '5.0'
19+
description = 'Android Multi Languages Adaptation Framework'
20+
website = "https://github.com/getActivity/MultiLanguages"
2321
}
2422

25-
tasks.withType(Javadoc) {//防止编码问题
23+
tasks.withType(Javadoc) {
2624
options.addStringOption('Xdoclint:none', '-quiet')
2725
options.addStringOption('encoding', 'UTF-8')
2826
options.addStringOption('charSet', 'UTF-8')

library/src/main/java/com/hjq/language/LanguagesSave.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* author : Android 轮子哥
1010
* github : https://github.com/getActivity/MultiLanguages
1111
* time : 2019/05/03
12-
* desc : 国际化保存
12+
* desc : 配置保存类
1313
*/
1414
final class LanguagesSave {
1515

0 commit comments

Comments
 (0)