使用 Kotlin Android 扩展以编程方式扩展布局

2024-04-05

我有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/white"
    android:paddingLeft="20dp"
    android:paddingRight="20dp">

    <TextView
        android:id="@+id/tvErrorTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textColor="@android:color/background_dark"
        android:textSize="18sp"
        />
    <TextView
        android:id="@+id/tvErrorDesc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:textColor="@android:color/darker_gray"
        android:textSize="16sp"
        />
    <TextView
        android:id="@+id/tvAction"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="10dp"
        android:layout_gravity="end"
        android:padding="5dp"
        android:textSize="15sp"
        android:textStyle="bold"
        android:textAllCaps="true"
        android:textColor="@android:color/holo_purple"
        />
</LinearLayout>

当我想在如下所示的活动之外使用 [kotlin android 扩展][1] 时,它不起作用。我最终做了 findViewById。

...
...
import kotlinx.android.synthetic.main.dialog_error.*
...
...
 val view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null, false)
    val tvErrorTitle = view.findViewById(R.id.tvErrorTitle) as TextView
    val tvErrorDesc = view.findViewById(R.id.tvErrorDesc) as TextView
    val tvErrorAction = view.findViewById(R.id.tvAction) as TextView

它不会直接从 xml 中提取视图。如何在以编程方式膨胀的布局中使用它并避免findViewById?

Note:这个问题严格属于[Kotlin Android Extensions][1],而不是语言本身。

Edit我已经导入了两个:

import kotlinx.android.synthetic.main.dialog_error.view.*
import kotlinx.android.synthetic.main.dialog_error.*

但 Android Studio 仍然尝试从 R.id 导入并且无法识别这两个导入。有什么遗漏吗? [1]:https://kotlinlang.org/docs/tutorials/android-plugin.html https://kotlinlang.org/docs/tutorials/android-plugin.html


来自您链接的文档 https://kotlinlang.org/docs/tutorials/android-plugin.html:

如果我们想调用 View 上的合成属性(在适配器类中有用),我们还应该导入

kotlinx.android.synthetic.main.activity_main.view.*.

即导入kotlinx.android.synthetic.main.layout.view.*以及加载View扩展属性。

Then:

val view = LayoutInflater.from(context).inflate(...)
view.tvErrorTitle.text = "test"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Kotlin Android 扩展以编程方式扩展布局 的相关文章

  • Android 6 getAccountName() 缺少 android.permission.GET_ACCOUNTS

    在 Android 6 设备上运行时出现以下异常 java lang SecurityException Missing android permission GET ACCOUNTS 这看起来像是一个相当简单的例外 但对我来说并非如此 我
  • AmazonServiceException:用户无权执行:dynamodb:DescribeTable 状态代码:400;错误代码:AccessDeniedException

    我原本以为这个问题是由于区域不匹配造成的 但是在更改区域后 在尝试此处找到的 Amazon AWS 示例时 我仍然遇到以下错误 DynamoDB映射器 https github com awslabs aws sdk android sam
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • 如何在 Windows Phone 8 中安装 .xap PhoneGap 版本?

    我使用phonegap android开发了一款简单的游戏 但在为Windows iOS Android 黑莓等构建后 它仅适用于Android设备 因此我可以为Android设备安装apk文件 但在Windows xap文件中未检测到Wi
  • 如何将视图动态添加到已在 xml 布局中声明的relativelayout?

    我宣布了一个RelativeLayout在 xml 布局文件中 现在我想添加Views从代码到现有布局 我添加了一个Button通过代码动态地更改为现有布局 如下所示 rLayout RelativeLayout findViewById
  • ViewPager 开关 FragmentPagerAdapter

    我有一个ViewPager这是由一个FragmentPagerAdapter 我想将第一个适配器更换为另外两个 问题是之前加载的所有页面 同时具有第一个适配器 仍然是旧的页面 我查看了源代码FragmentPagerAdapter并猜测问题
  • 如何使用 jackson 反序列化为 Kotlin 集合

    我想要的示例代码 data class D val a String val b Int val jsonStr a value1 b 1 a value2 b 2 what I need val listOfD List
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • Google Games API 需要 games_lite 函数

    我使用 Google Play 游戏服务 我从官方示例中获取了代码 尝试使用 API 27 和 API 17 所有功能仅在一个帐户 所有者 Google 开发者控制台 下有效 在任何其他帐户下均有效 不行 我明白了 E AndroidRun
  • 在另一个 Intent 中发送 Intent

    也许我的处理方式是错误的 但我想在我自己的应用程序中响应我的 Android AppWidget 的点击事件并启动一个 Activity 当时我设置了PendingIntent我还有一个Intent我想在点击时启动它 我的onStartCo
  • 自定义 ListView 具有不同的行布局,根据 Web 服务响应进行扩展

    我有列表视图 我有3组观点 图像视图 视频查看 文本视图 我有一个返回图像 视频和文本的网络服务器 因此 根据服务器的响应 我想膨胀列表视图中行的视图 我知道使用自定义适配器来扩展自定义布局 我想知道如何使用自定义适配器来扩充视图类型 例如
  • 将原生 Twilio Android SDK 与 Flutter 集成

    我正在尝试使用 flutter 创建 IP 语音 VOIP 移动应用程序 我还没有看到 twilio 语音 api 的 flutter 插件的实现 所以我使用 MethodChannel 将我的应用程序与本机 android 语音 api
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • 错误:包 com.google.android.gms.appstate 不存在

    由于此错误 无法编译我的 android 项目 BaseGameUtils src main java com google example games basegameutils GameHelper java Error 32 39 e
  • ViewPager 的 Android Viewholder

    您好 我正在使用 ViewPager 但我现在想保留状态 而不是重新生成单元格 我注意到 viewpager 与 listviews 的自定义适配器非常相似 它们的功能类似 listview 在单元格不再出现在屏幕上后重新生成单元格中的数据
  • 更改弹出对话框的背景颜色

    我编写了显示弹出对话框的 android 代码 但我想将背景颜色从黑色更改为白色 然后更改文字颜色 这是对话框的代码 mPrefs PreferenceManager getDefaultSharedPreferences this Boo
  • 三星 tab2 平板电脑的 Android 开发

    是否可以使用 Eclipse 在 Samsung Tab 2 平板电脑中开发 Android 应用程序 需要安装什么驱动吗 当然可以 你必须安装标准的android开发工具 SDK ADT ad eclipse Juno最新版本 从这里下载
  • Android 4 上的 html5 视频:全屏播放然后重定向到另一个网页 - 不起作用

    我正在为 Android 4 智能手机设计一个 html5 页面 其中包含一个 3gpp 或 mp4 视频 打开时必须自动全屏播放 当视频结束时应该重定向到另一个网址 一些谷歌搜索告诉我 Android 4 上不再允许自动播放 因此我选择显
  • Android 等距游戏引擎 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 是否有任何现有的开源或商业解决方案
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐