Git Product home page Git Product logo

multilanguages's Introduction

Android multi-language(support android O+) 中文

support third library multi-language( if there is a corresponding language resource file) ,in version 2.0.

version 2.0

Uses the Transform API to compile instrumentation to achieve attachBaseContext method auto insert of Activity and Service (code is in plugin)

  • support androidx
  • support kotlin
  • Not support Instant Run

Uses

Lastest version

modlue multi-language.plugin multi-languages
version Download Download

import

  • Import gradle plugin

    classpath 'com.github.jokar:multi-languages.plugin:<latest-version>'
    
  • apply plugin in app buidle.gradle file

    apply plugin: 'multi-languages'
    

    gradle configuration

    multiLanguages {
        //set plugin is enable( default)
        enable = true 
    }
    
  • import Library

    implementation 'com.github.jokar:multi-languages:<latest-version>'
    
  • application init

    public class MultiLanguagesApp extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        //Save the system language selection when entering the app for the first time.
        LocalManageUtil.saveSystemCurrentLanguage(base);
        super.attachBaseContext(MultiLanguage.setLocal(base));
    }
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        /**
        The user saves the system selection language when switching languages on the system settings page (in order to select when the system language is used, if it is not saved, it will not be available after switching languages)
        **/
        LocalManageUtil.saveSystemCurrentLanguage(getApplicationContext(), newConfig);
        MultiLanguage.onConfigurationChanged(getApplicationContext());
    }
    
    @Override
    public void onCreate() {
        super.onCreate();
        MultiLanguage.init(new LanguageLocalListener() {
            @Override
            public Locale getSetLanguageLocale(Context context) {
                //return your local settings
                return LocalManageUtil.getSetLanguageLocale(context);
            }
        });
        MultiLanguage.setApplicationLanguage(this);
    }
    }
    

    sample of save multi-language select LocalManageUtil

then is done


sample image

sample-image

multilanguages's People

Contributors

michaeljokar avatar mr-shitou avatar xxjy avatar yumore avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

multilanguages's Issues

第三方的SDK和控件没有更改

App的语言是更改成功了,但是第三方的SDK和控件的语言依然和系统一致,这是什么原因?按理说在Application的attachBaseContext(Context base)方法中设置的应该可以更改第三方的啊?

新工程嵌入的时候,报Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

Process: com.example.multilanguage2, PID: 22233
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.multilanguage2/com.example.multilanguage2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
at android.os.Handler.dispatchMessage(Handler.java:112)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:159)
at android.app.FragmentManagerImpl.getTargetSdk(FragmentManager.java:2978)
at android.app.FragmentManagerImpl.attachController(FragmentManager.java:2967)
at android.app.FragmentController.attachHost(FragmentController.java:86)
at android.app.Activity.attach(Activity.java:7366)

文档写的不太清楚

你好,我在项目中使用了这个开源库
但是,有个问题想问一下
plugin的作用是什么,第三方库语言变换么
我之前在使用的过程中就出现集成第三方SDK导致Service创建失败,找了好久才发现是插件的原因,看到#7 升级了插件才解决了问题
所以,希望可以将文档写的更详细些,把改变应用内语言和第三方库分离开,毕竟有些第三方库并不能了解的很清楚,提个小建议
非常感谢开源这个库,这个库是目前来说,比较新并且star也算比较高的,希望能维护的越来越好
如果需要帮助一起维护这个库的话,我也希望可以尽自己的一份力
加油⛽️

接入项目之后 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'

如题 接入依赖以后 我运行项目就会报错
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'
java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.IllegalStateException: java.lang.IllegalStateException
不知道有没有人遇到 我不知道怎么解决

Application attachBaseContext崩溃

@OverRide
protected void attachBaseContext(Context base) {
MultiDex.install(this);
// 保存系统选择语言
LocalManagerUtil.INSTANCE.saveSystemCurrentLanguage();
super.attachBaseContext(LocalManageUtils.setLocal(base));
}

华为、小米手机语言切换语言后部分页面会自动变为跟随系统语言

华为荣耀9、小米手机语言切换语言后部分页面会自动变为简体中文 ,首页MainActivity的tab导航+3个Fragment,其中在切换到第三个fragment的时候,此页面自动换为显示简体,此fragmen中打印日志为选中的语言但切换显示始终为跟随系统语言,vivo xplay6手机切换一切正常,即时在basefragment中的重写onHiddenChanged 方法中再次设置LocalManageUtil.setApplicationLanguage(context) 也没用,请问如何解决?

升级androidx的v7包到1.1.0 会出现国际化错乱

androidx.appcompat:appcompat:1.1.0
设置下边夜间模式AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
这个包 1.0.2 没问题 1.1.0会错乱,情况就是代码设置的可以,xml里直接设置的无效

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 白天模式下就是正常的

Class versions V1_5 or less must use F_NEW frames

+-----------------------------------------------------------------------------+
|                     Multi Languages Plugin START                            |
+-----------------------------------------------------------------------------+
+------------------------isIncremental:false----------------------------------+
add attach method to com/tianxin/downloadcenter/backgroundprocess/RemoteBackgroundProcess
add attach method to com/tianxin/downloadcenter/backgroundprocess/processprotecter/ForegroundAssistService
add attach method to com/tcloud/core/connect/mars/service/MarsServiceNative
add attach method to com/tcloud/core/ui/baseview/SupportActivity
add applyOverrideConfiguration method to com/tcloud/core/ui/baseview/SupportActivity

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithMultiLanguagesForGoogleDebug'.
> Class versions V1_5 or less must use F_NEW frames.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2m 1s
657 actionable tasks: 444 executed, 213 from cache

我使用的gradle版本如下:

classpath 'com.android.tools.build:gradle:4.0.2'

我使用的multi-languages版本如下:

classpath 'com.github.jokar:multi-languages.plugin:0.1.1'

打包编译报错

/app/build/intermediates/transforms/MultiLanguages/debug/47. jar as removed. Output mapping should
应该是插件混淆问题

打开Service奔溃

报错
java.lang.VerifyError: Verifier rejected class com.github.jokar.multilanguages.MyServices due to bad method void com.github.jokar.multilanguages.MyServices.attachBaseContext(android.content.Context)

编译Release包在混淆过程中产生了的太多的AGPBI提醒,直到GC overhead limit exceeded崩溃了,打包失败

Android target SDK 是Android13:

=============================================================================

#Android SDK依赖
TARGET_SDK_VERSION=33
MIN_SDK_VERSION=21
COMPILE_SDK_VERSION=33
KOTLIN_COROUTINES_VERSION=1.6.1

=============================================================================

gradle tools的版本:

=============================================================================

classpath 'com.android.tools.build:gradle:7.3.1'
classpath "com.github.jokar:multi-languages.plugin:0.1.5"

=============================================================================

gradle.properties文件中的部分内容:

=============================================================================

#gradle提速相关
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.caching=true
#优化kotlin
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kotlin.code.style=official
#优化kapt
kapt.incremental.apt=true
kapt.include.compile.classpath=false
#android项目提速相关
android.databinding.incremental=true
android.injected.testOnly=false
android.useAndroidX=true
android.enableJetifier=true
android.enableBuildScriptClasspathCheck=false
android.suppressUnsupportedCompileSdk=33

=============================================================================

执行assembleOfficialRelease命令,编译过程中的部分日志:

=============================================================================

AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
File system event consumer thread stopped due to exception
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:130)
at java.base/sun.nio.fs.UnixPath.(UnixPath.java:69)
at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:279)
at java.base/java.nio.file.Path.of(Path.java:147)
at java.base/java.nio.file.Paths.get(Paths.java:69)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry$1.handleChangeEvent(DefaultFileWatcherRegistry.java:89)
at net.rubygrapefruit.platform.internal.jni.AbstractFileEventFunctions$ChangeEvent.handleEvent(AbstractFileEventFunctions.java:266)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry.lambda$createAndStartEventConsumerThread$0(DefaultFileWatcherRegistry.java:84)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry$$Lambda$153/0x0000000800355c40.run(Unknown Source)
at java.base/java.lang.Thread.run(Thread.java:829)
Exception in thread "Daemon client event forwarder" java.lang.OutOfMemoryError: GC overhead limit exceeded
Problem in daemon expiration check
java.lang.OutOfMemoryError: GC overhead limit exceeded

Task :app:minifyOfficialReleaseWithR8
AGPBI: {"kind":"error","text":"java.lang.OutOfMemoryError: GC overhead limit exceeded","sources":[{}],"tool":"R8"}
java.lang.OutOfMemoryError: GC overhead limit exceeded

Task :app:minifyOfficialReleaseWithR8 FAILED

=============================================================================

初步怀疑是multi-languages插件中当前的ASM写法存在大量的内存泄露问题,导致了内存OOM了,麻烦大佬抽时间能看看吗?

混淆出错

AGPBI: {"kind":"error","text":"Illegal invoke-super to void android.app.IntentService.attachBaseContext(android.content.Context) from class com.google.firebase.components.ComponentDiscoveryService","sources":[{"file":"F:\\\app\build\intermediates\transforms\MultiLanguages\release\42.jar"}],"tool":"D8"}

Task :app:transformClassesAndResourcesWithR8ForRelease FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesAndResourcesWithR8ForRelease'.

com.android.tools.r8.CompilationFailedException: Compilation failed to complete

请问这种是什么情况???

Android Studio 3.5
Gradle 3.4.2

切换语言后textview问题

切换阿语后,动态设置的setText都没问题,但是在xml里面写的都不行,但是这个demo没问题,我的项目就是不行,都是一样的代码

Service报错崩溃

继承 Service
错误信息:
2019-10-10 15:28:18.438 31956-31956/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: gqz.pager, PID: 31956
java.lang.NoSuchMethodError: No super method attachBaseContext(Landroid/content/Context;)V in class Landroid/content/ContextWrapper; or its super classes (declaration of 'android.content.ContextWrapper' appears in /system/framework/framework.jar)
at gqz.pager.service.MyService.attachBaseContext(Unknown Source:4)
at android.app.Service.attach(Service.java:761)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3337)
at android.app.ActivityThread.-wrap4(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

theme里面设置的windowBackground图片资源适配不了多语言环境

我在AndroidManifest.xml文件中配置SplashActivity的theme:

AndroidManifest.xml

<activity
            android:name="com.youngwu.test.SplashActivity"
            android:resizeableActivity="true"
            android:screenOrientation="portrait"
            android:theme="@style/splashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

styles.xml

<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/welcome_layer</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>

/drawable/welcome_layer.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:src="@drawable/common_app_welcome_background" />
    </item>

    <item android:bottom="75dp">
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/common_startup_logo" />
    </item>

    <item
        android:bottom="66dp"
        android:gravity="center">
        <bitmap
            android:gravity="center"
            android:src="@drawable/common_startup_slogan" />
    </item>
</layer-list>

分别在drawable-xxhdpi文件夹下面放置了:common_app_welcome_background.webp,common_startup_logo.webp,common_startup_slogan.webp。

然后在drawable-zh-rCN-xxhdpi和drawable-zh-rTW-xxhdpi文件夹下面各放置了:common_startup_slogan.webp。

目的是想在英文、简体、繁体下面各自显示不一样的slogan,但是发现如果在Application的onCreate()方法里面执行时间较长,比如debug包可能2.5s,就会出现theme先走系统的Locale然后Application的onCreate()方法执行完后,到了SplashActivity界面出现才显示了以APP内部设置的Locale方案的theme。也就是觉得APP内部配置的Locale方案仍然还没有做到快于系统决定首先显示APP theme的时机。

具体的Demo代码,我写在这里:https://github.com/yinyangwu/Internationalization.git

编译出现问题

Execution failed for task ':app:transformClassesWithMultiLanguagesForDebug'.

语言突然恢复成默认语言

老哥,我APP的默认语言是英文,手机的系统语言是简体中文。APP设置跟随系统后,APP显示简体中文--正常。但是偶尔用着用着会出现APP内的语言变成了英文,重启APP又恢复了简体中文。这种情况出现了大概3次

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.