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


  • 2019-05-18 12:37:39

    Android夜间模式的实现方案

    对于一款阅读类的软件,夜间模式是不可缺少的。最初看到这个需求时候觉得无从下手,没有一点头绪。后来通过查阅资料发现Android官方在Support Library 23.2.0中已经加入了夜间主题。也就是只需要通过更换主题便可实现日间模式和夜间模式的切换。下面截取项目实现的夜间模式效果图:

  • 2019-05-18 12:38:41

    android 快速实现夜间模式

    最近项目中遇到了一个问题,夜间模式在8.0以上的手机中不起作用,查看了一下原因,是夜间模式实现方法的问题。分两种情况介绍一下

  • 2019-05-18 12:40:35

    Android夜间模式的几种实现

    通过增加一层遮光罩来实现。效果不是很理想,但是好用,毕竟很多手机都有自己的夜间模式了

  • 2019-05-19 02:25:15

    php使用TCPDF生成PDF文件教程

    orientation属性用来设置文档打印格式是“Portrait”还是“Landscape”。 Landscape为横式打印,Portrait为纵向打印

  • 2019-05-21 11:46:05

    RecyclerView 加动画的坑

    然后加到recyclerView上,我是在adapter上加的。Adapter的holder复用相信大家也都很熟悉了,这个在绘制效率的提高上很重要,也很容易发现一个问题,就是内容混乱的复用。所以常见的处理就是对view加上tag来多次判断,对于visibility之类的设置一定是if...else的写法,光有if是不可以的。

  • 2019-05-21 11:54:10

    Android中如何设置字体大小

    首先要强调一点,某些用户可能存在视力障碍甚至几近失明,他们无法顺利阅读一般尺寸下的文字内容。Android操作系统意识到了这些情况,并提供了一套显示辅助功能,使得用户可以根据自己的使用习惯随意缩放设备中文本字体的大小。 要在设备上修改字体设定,首先启用“设定”应用,然后选择“显示”项下的“字体尺寸”。用户可以在设备预置的四种文本字体尺寸中选择适合自己的方案(包含小、正常、大、超大),详见图一。

  • 2019-05-21 12:34:38

    浅谈Recycleview嵌套卡顿 以及你所不知道的解决方案

    由于项目需要,需要做到recycleview 这里先不讲如何用其他控件代替这种嵌套的方式 先假定你已经嵌套了 老板还不给时间给你给布局方式 那么这个时候你的这个嵌套列表 必定是卡顿的 只要超过一屏,展示效果会有卡顿现象,原因就是由于两个RecyclerView的存在,使得滑动的view滑出当前屏幕的释放存在冲突

  • 2019-05-21 12:35:54

    RecyclerView setHasFixedSize(true)的意义

    设置为true,再调用notifyDataSetChanged(),发现大小重新计算了,看来理解出现错误了。还是再看一下哪些地方用到这个mHasFixedSize吧。

  • 2019-05-21 12:37:34

    RecyclerView 刷新闪烁

    闪烁是 notifyDataSetChange 造成的。由于适配器不知道整个数据集中的哪些内容已经存在,在重新匹配 ViewHolder 时发生的。 当然,遇到这个问题时有去搜索一些答案,看到的很多都是去禁止 RecycleView 的默认动画,可惜这对我没什么用。下面的方法是对我有用的。