kotlinx.android.synthetic.** 用法与总结

2020-11-16 22:56:25

参考地址  kotlinx.android.synthetic.** 坑点


看着听高大上的样子,哎,谁有精力记住这么多库,哎。 

记下来再说吧

Kotlin通过添加

   apply plugin: 'kotlin-android-extensions'12

可以直接使用layout id 名称获取当前view对象,详细使用如下:

//layout<?xml version="1.0" encoding="utf-8"?><FrameLayout    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimary"
    android:id="@+id/root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <TextView        android:text="Hello World"
        android:id="@+id/hello_world"
        android:text="@string/time_span"
        style="@style/basicTextStyle" /></FrameLayout>//kotlin 代码

package cn.enjoytoday.test

//这是重点,需要手动添加或者android studio提示添加
import kotlinx.android.synthetic.main.activity_drag_test.*

class DragTestActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
         setContentView(R.layout.activity_drag_test)
         hello_world.text = "完美的写法"

    }


  }12345678910111213141516171819202122232425262728293031323334353637383940

就目前为止都是完美的用法,代码简洁的不要不要的。就网上目前情况看,一般的找不到view无法直接通过id代替对象操作使用大多是由于未能成功导入kotlin-android-extensions插件或者直接没有添加,添加方式如下:

apply plugin: 'com.android.application'//如下两个插件缺一个不可,kotlin-android为基本支持android 开发插件,kotlin-android-extensions就是省去我们频繁找id的插件了
apply plugin: 'kotlin-android'        apply plugin: 'kotlin-android-extensions'buildscript {
    ext.kotlin_version = '1.1.4-3'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    }
}


dependencies {

      compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"}12345678910111213141516171819202122232425

但,这不是终点。真正的槽点在于,即使你以上配置完全正确还是有可能出现找不到的错误,这个错误的产生源于三方的aar导入,存在你使用的layout是导入的三方的aar中的。这里需要注意的是kotlin-android-extensions插件给我们自动寻址的id都是基于我们当前apk资源下的,即是:Resource指向的包。也就是java中比较常见的如下:

 import cn.enjoytoday.test.R.*; //当前应用资源,kotlin-android-extensions寻址对象
 import cn.enjoytoday.external.R.*; //引入的三方包的资源123

这个时候,我们只能乖乖自己找id了,如下:

package cn.enjoytoday.testimport kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_list_item.*  //android资源

class DragTestActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        hello_world.text = "完美的写法"

        val view= View.inflate(this,android.R.layout.activity_list_item,null)
        layout.addView(view)

        view.text1.text ="text"

    }
}

//会报错如下:DragTestActivity.kt: (7, 39): Unresolved reference: activity_list_itemDragTestActivity.kt: (19, 14): Unresolved reference: text1

//修改后
import kotlinx.android.synthetic.main.activity_main.*

class DragTestActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        hello_world.text = "完美的写法"

        val view= View.inflate(this,android.R.layout.activity_list_item,null)
        layout.addView(view)

        val text1=view.findViewById(android.R.id.text1) as TextView
         text1.text ="Test"

    }
}123456789101112131415161718192021222324252627282930313233343536373839404142434445

图就不贴了,一般来说这种方法会比较少,但不是不可能,尤其三方依赖越来越多。希望以后kotlin-android-extensions可以更加智能吧.

Enjoytoday,EnjoyCoding


  • 2020-02-22 17:45:43

    tweenjs简单快速学习

    tweenjs 是使用 JavaScript 中的一个简单的补间动画库,支持数字、对象的属性和 CSS 样式属性的赋值。 tweenjs 以平滑的方式修改元素的属性值,需要传递给 tween 要修改的值、动画结束时的最终值和动画花费时间(duration),之后 tween 引擎就可以计算从开始动画点到结束动画点之间值,从而产生平滑的动画效果。

  • 2020-02-22 17:47:12

    easeJs入门学习教程

    createjs中包含以下四个部分: EaselJS:用于 Sprites、动画、向量和位图的绘制,创建 HTML5 Canvas 上的交互体验(包含多点触控) TweenJS:用于做动画效果 SoundJS:音频播放引擎 PreloadJS:网站资源预加载

  • 2020-02-22 17:54:59

    最新FullCalendar中文文档

    Fullcalendar是一款用来管理日程安排、工作计划的日历工具,它功能非常强大而且非常实用。而目前网络上没有很好的中文文档,为了更好的和大家分享Fullcalendar的相关使用,即日起计划将Fullcalendar的英文文档翻译成中文版。

  • 2020-02-22 17:57:05

    nuxtjs支持api接口,serverMiddleware

    Who can’t relate to this: You’ve built a small portfolio page for someone, maybe a company, a friend or yourself. And the only API endpoint you’d need is one for a form. What now? Scaffolding a new service just for this one endpoint?

  • 2020-02-22 17:59:34

    FullCalendar插件的基本使用带详细配置翻译

    前段时间,一直在开发考勤系统,当时为满足设计的需求,选了好几个插件,最后决定采用Fullcanlendar的插件。感觉这个插件可以满足现阶段的功能开发需求

  • 2020-02-22 18:03:10

    Vue组件中使用Sass或者Less全局变量

    本文以Sass做案例,Less的参考,基本配置大同小异。 假如我们有一个Sass的全局变量common.scss文件,路径 ../style/common.scss 代码如下:

  • 2020-02-23 23:27:26

    Nuxt.js 基础入门教程

    Nuxt.js 就是一个极简的 vue 版的 ssr 框架。基于它,我们可以快速开发一个基于 vue 的 ssr 单页面应用。