Kotlin - 将 Kotlin 方法转换为 LayerDrawable 的 java 时出现问题
Kotlin - Issue in converting Kotlin method to java for LayerDrawable
下面是从 Kotlin 代码函数转换后的 java 函数。
@RequiresApi(api = Build.VERSION_CODES.M)
public void setWhiteNavigationBar(@NonNull Dialog dialog) {
Window window = dialog.getWindow();
if (window != null) {
DisplayMetrics metrics = new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(metrics);
GradientDrawable dimDrawable = new GradientDrawable();
GradientDrawable navigationBarDrawable = new GradientDrawable();
navigationBarDrawable.setShape(GradientDrawable.RECTANGLE);
navigationBarDrawable.setColor(Color.WHITE);
val layers = arrayOf<Drawable>(dimDrawable, navigationBarDrawable)
LayerDrawable windowBackground = new LayerDrawable(layers);
windowBackground.setLayerInsetTop(1, metrics.heightPixels);
window.setBackgroundDrawable(windowBackground);
}
}
我对该函数中的下一行有问题。
我很困惑如何在 Java 中的 kotlin 行下面写:
val layers = arrayOf<Drawable>(dimDrawable, navigationBarDrawable)
所以,谁能指导我们如何在 java 中写下这一行?
谢谢。
为什么不直接将 kotlin 代码转换为 java 我们在 android studio 中有选项。
you can go to Tools > Kotlin > Show kotlin bytecode
它会向您显示完整的 java 代码 class。
这是您的解决方案:
public void setWhiteNavigationBar(@NonNull Dialog dialog) {
Window window = dialog.getWindow();
if (window != null) {
DisplayMetrics metrics = new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(metrics);
GradientDrawable dimDrawable = new GradientDrawable();
GradientDrawable navigationBarDrawable = new GradientDrawable();
navigationBarDrawable.setShape(GradientDrawable.RECTANGLE);
navigationBarDrawable.setColor(Color.WHITE);
GradientDrawable [] layers =new GradientDrawable[]
{dimDrawable,navigationBarDrawable};
LayerDrawable windowBackground = new LayerDrawable(layers);
windowBackground.setLayerInsetTop(1, metrics.heightPixels);
window.setBackgroundDrawable(windowBackground);
}
}
事实证明,在 kotlin 中 arrayOf()
是一种创建特定类型数组的方法。在你的情况下 Drawable
。在 Java 中,您可以通过以下方式创建:
Drawable[] drawables = new Drawable[] {dimDrawable, navigationBarDrawable}
可以省略new Drawable[]
,写成:
Drawable[] drawables = {dimDrawable, navigationBarDrawable}
下面是从 Kotlin 代码函数转换后的 java 函数。
@RequiresApi(api = Build.VERSION_CODES.M)
public void setWhiteNavigationBar(@NonNull Dialog dialog) {
Window window = dialog.getWindow();
if (window != null) {
DisplayMetrics metrics = new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(metrics);
GradientDrawable dimDrawable = new GradientDrawable();
GradientDrawable navigationBarDrawable = new GradientDrawable();
navigationBarDrawable.setShape(GradientDrawable.RECTANGLE);
navigationBarDrawable.setColor(Color.WHITE);
val layers = arrayOf<Drawable>(dimDrawable, navigationBarDrawable)
LayerDrawable windowBackground = new LayerDrawable(layers);
windowBackground.setLayerInsetTop(1, metrics.heightPixels);
window.setBackgroundDrawable(windowBackground);
}
}
我对该函数中的下一行有问题。 我很困惑如何在 Java 中的 kotlin 行下面写:
val layers = arrayOf<Drawable>(dimDrawable, navigationBarDrawable)
所以,谁能指导我们如何在 java 中写下这一行?
谢谢。
为什么不直接将 kotlin 代码转换为 java 我们在 android studio 中有选项。
you can go to Tools > Kotlin > Show kotlin bytecode
它会向您显示完整的 java 代码 class。
这是您的解决方案:
public void setWhiteNavigationBar(@NonNull Dialog dialog) {
Window window = dialog.getWindow();
if (window != null) {
DisplayMetrics metrics = new DisplayMetrics();
window.getWindowManager().getDefaultDisplay().getMetrics(metrics);
GradientDrawable dimDrawable = new GradientDrawable();
GradientDrawable navigationBarDrawable = new GradientDrawable();
navigationBarDrawable.setShape(GradientDrawable.RECTANGLE);
navigationBarDrawable.setColor(Color.WHITE);
GradientDrawable [] layers =new GradientDrawable[]
{dimDrawable,navigationBarDrawable};
LayerDrawable windowBackground = new LayerDrawable(layers);
windowBackground.setLayerInsetTop(1, metrics.heightPixels);
window.setBackgroundDrawable(windowBackground);
}
}
事实证明,在 kotlin 中 arrayOf()
是一种创建特定类型数组的方法。在你的情况下 Drawable
。在 Java 中,您可以通过以下方式创建:
Drawable[] drawables = new Drawable[] {dimDrawable, navigationBarDrawable}
可以省略new Drawable[]
,写成:
Drawable[] drawables = {dimDrawable, navigationBarDrawable}