Kotlin(类,class)
初始化类 123456class User (_nickname:String){ val nickname:String init{ nickname = _nickname }} 以上就是一个kotlin类的初始化,他的主构造函数直接写在User类后面,还省略了关键字constructor。但是由于语法结构的问题,他没有函数体,所有就通过init与主构造方法一起使用。在类中的元素必须初始化,可以如上图所示,也可以直接赋值。val nickname:String = _nickname kotlin还可以化简操作,直接把属性声明在主构造函数中1class User(val...
Android(Fragment)
Fragment是什么Fragment是一种可以嵌入在Activity当中的UI片段。你可以将Fragment理解成一个迷你型的Activity,虽然这个迷你型的Activity有可能和普通的Activity是一样大的。解决某些问题:一个页面只能展示一个activity,如果要展示另一个的话,需要入栈和出栈。但是一个activity中可以包含很多个fragment。实现了多页面共存。 简单使用 首先为我们的fragment创建两个布局文件如下: 12345678910111213<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" ...
kotlin数组初始化
Array今天在leetcode刷题时,突然发现,自己不会使用最基础的数组以及他的初始化。所以在这里说明一下 使用arrayOf()这是官方推荐的一种写法,他接受的时可变长参数,也就是可以接受任意的参数,直接生成一个数组。 使用arrayOfNull<>(n),初始化一个数组全为空,接受参数为数组的大小。 直接使用Array()生成数组。他又两种构造器 直接传递一个int,这个就是他的size。 除了传递一个int外,还可以传递一个lambda函数,作为数组的初始值。
Kotlin延迟初始化和密封类,内部类
延迟初始类 这个应用的前提:很多情况下,我们会先初始化一个类,但是因为没有给他赋值,就给他赋值为null。如: 1private var adapter: MsgAdapter? = null 而在kotlin中,对于可能为空的变量,需要进行很多次非空判断,非空保护,即便你知道他不可能为空。以满足他的语法规则。 延迟初始化然后这里提供一种方法: 1private lateinit var adapter: MsgAdapter lateinit这个关键字表明当前这个变量不会立刻初始化,而是会在后面的步骤中赋值。但是他也有一个问题,如果你在使用这个变量时,没有赋值,他会抛出没有初始化的异常UninitializedPropertyAccessException。解决这个问题的方法就是在给他初始化的时候加一个判断是否初始化。 123if (!::adapter.isInitialized) { adapter = MsgAdapter(msgList) } 这是一个固定的语法规则,能判断是否完成初始化。 密封类密封类的关键字是sealed...
Android入门(RecyclerView控件)
RecyclerView控件首先,他并不是系统自带的控件,而是在androidx中的,也就是还需要从外部导入。不过好在IDEA已经帮我们导入过了,在build.gralde中 12345678910dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation...
Android入门(listview控件)
很烦,,,写了好久然后浏览器闪退了。。。然后写的全无了。所以再写一遍就随便写点了。使用listview的关键。 基本使用 直接在布局引入一个listview控件 然后因为listview的数据不能直接传入。需要通过adapter适配器来实现的,其中最常用的就是arrayAdapter 因此在activity中,初始化一个arrayAdapter。 他的初始化一共需要三个参数。 activity:也就是需要把本类传进去。 resourceid: 需要传入子项布局(也就是listview中每一项内容的样式布局)(可以使用系统默认的,也可以自己定义一个布局。这里不展示) data:传入数据源,一般都是列表。 然后使lisview的adapter属性赋值为你初始的内容1listview.adapter =...
Android自定义控件(详解)
在本质上,所有的控件和布局都是View类的子类。也就是说明,在理论上,你可以自己手搓一个控件,也就是自定义控件。而且定义自己的方法和图形,界面等。而这都是可行的。 三种自定义控件自绘控件自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。这是一个完完全全由自己设计的控件 组合控件组合控件的意思就是,我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。 继承控件继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 这篇文章中介绍的PowerImageView就是一个典型的继承控件。 布局文件转化成view类(三种方式)1.//context:上下文,...
Android自定义控件
布局和控件的继承关系 引入布局我们可以自定义一个布局,然后把这个布局当作一个控件通过<include layout="布局文件">标签实现引入。比如自己设计的标签栏设计为一个布局文件,然后把这个布局文件当作一个控件,然后去引入他。但是,这样子的控件没有统一设定的逻辑,只有样式,没有逻辑程序设计,如果每个调用该布局的都重写一遍逻辑结构,就会有很多的冗杂代码。因此 创建自定义控件实现控件的逻辑自洽。不用再去花更多的代码去重复操作。 新建TitleLayout继承自LinearLayout,让它成为我们自定义的标题栏控件,代码如下所示: 12345class TitleLayout(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { init { LayoutInflater.from(context).inflate(R.layout.title, this)...
Android常用布局
布局和控件的关系 LinearLayout 属性 释义 样例 orientation 指定了排列方向 vertical,horizontal layout_gravity 控制控件的对齐方式 layout_weight 指定控件的大小 一般会将layout_width指定为0dp,这是一种标准的写法 layout_weight的计算方式系统会先把LinearLayout下所有控件指定的layout_weight值相加,得到一个总值,然后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。因此如果想让EditText占据屏幕宽度的3/5,Button占据屏幕宽度的2/5,只需要将EditText的layout_ weight改成3,Button的layout_weight改成2就可以了。 RelativeLayout相对布局 1234567<Button android:id="@+id/button5"...
Android常用控件
常用控件TextView显示文本 属性 释义 样例 gravity 来指定文字的对齐方式 top,bottom,start等 textColor 指定文字颜色 red,green textSize 指定文字大小 sp为单位,这样当用户在系统中修改了文字显示尺寸时,应用 程序中的文字大小也会跟着变化。重新运行程序 text 指定文字内容 Button放置按钮 属性 释义 样例 textAllCaps 指定文字是否大小写 false,true 注册Button点击事件的方式 函数式API123button.setOnClickListener { // 在此处添加逻辑 } 2.用实现接口的方式来进行注册 12345678910111213141516 class MainActivity : AppCompatActivity(),View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { ...