【问题标题】:BindingAdapter to set a layout fullscreenBindingAdapter 设置布局全屏
【发布时间】:2021-11-27 01:39:57
【问题描述】:

我正在尝试在 Java 中复制以下用 Kotlin 编写的代码。它实际上按照一些逻辑将布局设置为全屏,特别是绑定发生在元素CoordinatorLayoutapp:layoutFullscreen="@{true}"

@BindingAdapter("layoutFullscreen")
fun View.bindLayoutFullscreen(previousFullscreen: Boolean, fullscreen: Boolean) {
    if (previousFullscreen != fullscreen && fullscreen) {
        systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    }
}

我试图把所有东西都变成java,但是我有各种各样的错误

@BindingAdapter("layoutFullscreen")
public static void bindLayoutFullscreen(Boolean previousFullscreen, Boolean fullscreen) {
    if (previousFullscreen != fullscreen && fullscreen) {
        View.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    }
}

如何在 java 中获得与 kotlin 代码相同的功能?

提前致谢, 贾科莫。

【问题讨论】:

    标签: java android kotlin data-binding android-databinding


    【解决方案1】:

    注意:

    • Kotlin 扩展函数作为第一个参数提供给 java,所以这里view 是第一个参数。
    • or 在 java 中是 |
    • Java提供了setter/getter,而不是直接访问属性,所以systemUiVisibility的setter版本用在view
    • Java 中的分号; 必须在行尾。

    这是有效的 java 版本:

    @BindingAdapter("layoutFullscreen")
    public static void bindLayoutFullscreen(View view, boolean previousFullscreen, boolean fullscreen) {
        if (previousFullscreen != fullscreen && fullscreen) {
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        }
    }
    

    【讨论】:

    • 所以基本上fun View.bindLayoutFullscreen 是通过view 这样的?
    • 不应该是bindLayoutFullscreen(view: View, previousFullscreen: Boolean, fullscreen: Boolean)
    • @G.Ciardini 是的,完全是fun View.bindLayoutFullscreen => bindLayoutFullscreen(View view) in java
    • @G.Ciardini numbers, characters and booleans can be represented as primitive values at runtime - but to the user they look like ordinary classes .. This is a quote from doc.. 所以,Kotlin 中的布尔值可以在运行时转换为原语;但在 java 中,您必须在代码中使用原语 boolean 显式执行此操作...尽管 booleanBoolean 都适用于您的情况..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多