Kotlin - проблема при преобразовании метода Kotlin в java для LayerDrawable - PullRequest
0 голосов
/ 25 января 2020

Ниже приведена преобразованная функция java из функции кода Kotlin.

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

У меня проблема с приведенной ниже строкой внутри этой функции. Я запутался, как я могу написать ниже kotlin строку в Java:

val layers = arrayOf<Drawable>(dimDrawable, navigationBarDrawable)

Итак, кто-нибудь, пожалуйста, руководство, как мы можем написать эту строку в java?

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 января 2020

Как выясняется, arrayOf() в kotlin - это метод для создания массива типа c. В вашем случае Drawable. В Java вы можете создать это следующим образом:

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

Вы можете опустить new Drawable[] и написать:

Drawable[] drawables = {dimDrawable, navigationBarDrawable}
1 голос
/ 25 января 2020

Почему бы вам просто не преобразовать 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...