【问题标题】:Kotlin - Issue in converting Kotlin method to java for LayerDrawableKotlin - 将 Kotlin 方法转换为 Java 以用于 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编写这行代码?

谢谢。

【问题讨论】:

    标签: java android kotlin layerdrawable


    【解决方案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}
    

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 2021-08-16
      • 2021-02-03
      • 2019-03-12
      相关资源
      最近更新 更多