看效果图:
-
新建
values-en
文件夹,步骤:- 右键res,new , Android Resource Directory:
- 把Locale选入右侧:
- 再选择en, Any Region,点击ok。
regino
是区域、地方的意思。
这样values-en
文件夹,就自动生成 了。
- 右键res,new , Android Resource Directory:
-
手动添加
strings.xml
,并添加英文字符串
<resources>
<string name="app_name">LanguageDemo</string>
<string name="hello">hello</string>
</resources>
-
导入feisher/LanguageChangeableDemo,并调用。
- 导入依赖:
maven { url 'https://jitpack.io' } implementation 'com.github.feisher:LanguageChangeableDemo:v1.1.0'
- 新建App.java:
public class App extends Application { @Override public void onCreate() { super.onCreate(); CLang.init(this); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); CLang.swithLang(this);//这里为1.1.0版本新增处理方式,,兼容安卓8.0以上系统 } }
- AndroidManifest.xml中添加App.java:
<application android:name=".App" ... > ... </application>
- 布局中用
@string/me
引入字符串:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context=".MainActivity"> <TextView android:id="@+id/tv_hello" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" android:layout_centerInParent="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_hello" android:layout_marginTop="10dp" android:layout_centerHorizontal="true" android:onClick="changeLanguage" android:text="切换" /> </RelativeLayout>
-
MainActivity.java 调用逻辑
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void changeLanguage(View view) { CLang.swithLang(MainActivity.this);//注意这里要传activity,否则8.0以上会失效 MainActivity.this.recreate();//这句代码很有必要,如设置页面从其他页面跳转则需要再onActivtyRsult中recreate(); //针对组件化使用Router框架的:如设置页面有接受传入数据,需要自行处理重新加载逻辑 } }