【问题标题】:How to use Kotlin library in Java project?如何在 Java 项目中使用 Kotlin 库?
【发布时间】:2020-04-06 12:19:14
【问题描述】:

我找到了一个符合我目的的库,但它是在 Kotlin 上编写的。我可以在Java项目中使用它吗?

框架: https://github.com/mpetlyuk/initial_tips

在 Kotlin 上的使用:

// Create view for your tip
val inflater = LayoutInflater.from(Context)
val tipView = DataBindingUtil.inflate<ViewDataBinding>(inflater, R.layout.item_tooltip, null, false).getRoot()

// Create tip
val tip = Tooltip.Builder()
    .attachTooltipView(tipView)
    .withEnterAnimation(AnimationComposer(FadeInAnimator()).duration(ANIM_DURATION))
    .withExitAnimation(AnimationComposer(FadeOutAnimator()).duration(ANIM_DURATION))
    .withGravity(TipVerticalGravity.BOTTOM, TipHorizontalGravity.LEFT)
    .withAnchorView(/* anchor view */)
    .build()

// Create a queue of tips
val tooltipsQueue = LinkedBlockingQueue<Tip>(listOf(tip))

// Create a queue of tips
TipsManager.showTips(binding.root as ViewGroup, ContextCompat.getColor(this, 0 /* your resource color for dimming */)) { tooltipsQueue }

【问题讨论】:

    标签: java android android-studio kotlin


    【解决方案1】:

    您首先需要在您的应用中添加对 Kotlin 的支持。只需创建临时 kotlin 文件,android studio 将指导您如何操作。

    TextView tipView = (TextView) LayoutInflater.from(this).inflate(R.layout.item_tooltip, null, false).getRootView();
    Tooltip tip = new Tooltip.Builder()
            .attachTooltipView(tipView)
            .withEnterAnimation(new AnimationComposer<BaseViewAnimator>(new FadeInAnimator()).duration(500))
            .withExitAnimation(new AnimationComposer<BaseViewAnimator>(new FadeOutAnimator()).duration(500))
            .withGravity(TipVerticalGravity.BOTTOM, TipHorizontalGravity.LEFT)
            .withAnchorView(loginButton)
            .build();
    
    List<Tip> tips = new ArrayList<>();
    tips.add(tip);
    final LinkedBlockingQueue<Tip> tooltipsQueue = new LinkedBlockingQueue<>(tips);
    TipsManager.showTips(rootView, R.color.colorAccent, new Function0<Queue<Tip>>() {
        @Override
        public Queue<Tip> invoke() {
            return tooltipsQueue;
        }
    });
    

    【讨论】:

    • 你不需要添加 Kotlin 支持或创建 Kotlin 文件,不。
    • @AlexeyRomanov 在 lib 中,showTips 使用 Function0 里面的 kotlin.jvm.functions.Function0。因此,要使其正常工作,项目必须支持 kotlin。如有错误请指正
    • 不,它只需要 kotlin-stdlib 作为从 Java 使用它的依赖项。但它会被自动拾取,因为它是 Vergiliy 实际想要使用的库的依赖项。
    • 谢谢。一切正常。我仍然必须添加 Kotlin 支持,因为没有它,就没有 Function0 函数。
    【解决方案2】:

    您将库添加为依赖项,就像它是 Java 一样。 Kotlin 被设计成可以尽可能轻松地从 Java 中使用,即使您最终得到的代码不那么漂亮(参见 interoperation documentation)。具体例子翻译见How to convert a kotlin source file to a java source file

    【讨论】:

    • 我要补充一点,库本身也必须在编写时考虑到 Java 的使用,至少有几种方法可以使其无法从 Java 访问。
    猜你喜欢
    • 2019-02-03
    • 2021-02-01
    • 1970-01-01
    • 2022-11-28
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多