小编Dis*_*tra的帖子

Android 11 - window.setDecorFitsSystemWindow 不在状态栏和导航栏后面显示屏幕

我正在尝试将我的应用程序更新到 Android 11。我的应用程序的许多屏幕都是在 StatusBar 后面使用应用程序内容设计的。我将我的 gradle 更新到了 Android 11 并开始更新 Window 代码,以获得同样适用于 Android 11 设备的无限制行为。我在 Activitiys onCreate 方法中使用以下代码为 Android 11 之前的设备实现了我想要的结果:

Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Run Code Online (Sandbox Code Playgroud)

我试图通过使用为 Android 11 获得相同的无限制行为 w.setDecorFitsSystemWindows(false);

我尝试使用它而不是使用标志,将它与标志一起使用并传递 true 和 false,在设置标志之前和之后设置它,但我总是看到一个白色的状态和系统导航栏,而不是它们后面的我的应用程序内容。我试过的:

Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also tried with true
} else {
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

//or
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also tried with true
} 
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

//or
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false); //also …
Run Code Online (Sandbox Code Playgroud)

android windowinsets android-11

3
推荐指数
1
解决办法
3217
查看次数

将签名信息添加到 gradle 中的 apk 文件名

就我而言,旧的 apk 文件名包含未对齐和未签名的签名信息。使用以下方法在模块 gradle 文件中重命名这些旧文件名:

 applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = new File(
                output.outputFile.parent,
                output.outputFile.name.replace(".apk", "-${variant.versionCode}-${variant.versionName}.apk"))
    }
}
Run Code Online (Sandbox Code Playgroud)

版本代码和版本名称设置如下:

versionCode buildNumber()
versionName "${versionMajor}.${versionMinor}"
Run Code Online (Sandbox Code Playgroud)

在此重命名的结果中,签名信息(未对齐或未签名)位于变体版本代码之前。

现在我使用的是 gradle:3.0.0-beta6。因此我无法再使用旧方法,因为outputFile 更改为只读并且无法重命名。现在我尝试向我的 gradle 添加一个新的重命名方法,如下所示:

android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${archivesBaseName}-${variant.baseName}-${variant.versionCode}-${variant.versionName}.apk"
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,新的 apk 名称几乎看起来像旧的,但在 baseName 和 versionCode 之间缺少签名信息。该应用程序尚未签名,因此应该有未签名的信息。

有谁知道我如何能够在不进行硬编码的情况下添加此信息?

如果应用程序被签名,此信息应该消失,但如果可能的话,无需更改重命名方法。

android android-studio android-gradle-plugin android-app-signing

2
推荐指数
1
解决办法
523
查看次数