Kotlin - 将 Kotlin 方法转换为 Java 以用于 LayerDrawable 的问题

Posted

技术标签:

【中文标题】Kotlin - 将 Kotlin 方法转换为 Java 以用于 LayerDrawable 的问题【英文标题】:Kotlin - Issue in converting Kotlin method to java for LayerDrawable 【发布时间】:2020-05-11 09:07:33 【问题描述】:

以下是 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编写这行代码?

谢谢。

【问题讨论】:

【参考方案1】:

你为什么不直接将 kotlin 代码转换为 java 我们在 android studio 中有选项。

you can go to Tools > Kotlin > Show kotlin bytecode 

它会显示该类的完整 java 代码。

这是您的解决方案:

  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);
    

【讨论】:

先生,它在我的 android studio 中已禁用且呈灰色。 Drawable[] 层 = dimDrawable, navigationBarDrawable;为我工作。【参考方案2】:

事实证明,kotlin 中的arrayOf() 是一种创建特定类型数组的方法。在你的情况下Drawable。在 Java 中,您可以通过以下方式创建它:

Drawable[] drawables = new Drawable[] dimDrawable, navigationBarDrawable

你可以省略new Drawable[]并写:

Drawable[] drawables = dimDrawable, navigationBarDrawable

【讨论】:

以上是关于Kotlin - 将 Kotlin 方法转换为 Java 以用于 LayerDrawable 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Kotlin 中将一个对象转换为另一个对象的更好方法是啥?

如何将 Java 源文件的一部分转换为 Kotlin?

Kotlin > Spring Boot > 使用路由器 DSL,POST 方法主体,无法将 JSON 转换为 POJO

将 Kotlin 转换为 Java

将现有的 Flutter Kotlin 项目转换为 Flutter Java 项目

如何将此 Java 代码转换为 kotlin 代码