You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java编写的MainActivity中直接调用Anko组件类?

在Java的MainActivity中调用Kotlin编写的Anko登录视图

嘿,我来帮你搞定这个Java调用Kotlin Anko组件的问题~ 首先得理清几个关键的点,然后一步步来操作:

第一步:调整Kotlin的SingInView类,让它兼容Java调用

你原来的SingInView泛型绑定的是SingleInActivity,这会导致Java的MainActivity(继承AppCompatActivity)无法匹配类型。所以我们需要把泛型改成更通用的父类,同时确保类是公开的:

public class SingInView : AnkoComponent<AppCompatActivity> {
    override fun createView(ui: AnkoContext<AppCompatActivity>) = with(ui) {
        verticalLayout {
            lparams(width = matchParent, height = matchParent)
            textView("Member Login")
            editText { hint = "E-mail" }
            editText { hint = "PassWord" }
            button("Login")
        }
    }
}

第二步:在Java的MainActivity中调用这个Anko组件

Java里没有Kotlin的with语法糖,但我们可以直接通过AnkoContext来创建视图,然后设置为Activity的内容视图。代码示例如下:

import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import org.jetbrains.anko.AnkoContext;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 创建AnkoContext,关联当前MainActivity
        AnkoContext<MainActivity> ankoContext = AnkoContext.create(this, this);
        // 实例化SingInView并生成对应的视图
        View loginView = new SingInView().createView(ankoContext);
        // 将生成的登录视图设置为当前Activity的内容视图
        setContentView(loginView);
    }
}

额外注意事项

  • 确保你的项目已经正确配置了Kotlin与Java混编,并且添加了Anko的必要依赖(比如anko-appcompat-v7等),否则可能会出现找不到类的编译错误。
  • 如果你的SingInView是嵌套在其他Kotlin类中的,一定要把它改成顶层类或者添加public修饰符,否则Java代码无法访问到它。

内容的提问来源于stack exchange,提问作者hyunwookcho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:38:37