TextView 的学习
module 的 build.gradle 文件配置开启 ViewBinding
viewBinding {
enabled = true
}
在activity_main.xm中
添加代码
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is TextView"/>
可以看见空白顶格有This is Textview的一行字
如果要放在中间只要在andriod:text上打出
android:gravity="center"就可
表⽰⽂字在垂直和⽔平⽅向都居中对⻬
文字颜色:
通过
android:textColor
属性可以指定⽂字的颜⾊,通过
android:textSize
属性可以指定⽂字的⼤⼩。
EditText
是程序⽤于和⽤户进⾏交互的另⼀个重要控件,它允许⽤户在控
件⾥输⼊和编辑内容,并可以在程序中对这些内容进⾏处理。
在activity_main.xm中
添加代码
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
就可以打字了
android:hint="Type something here" 加一句,就可以提示用户打字
增加如下代码 可以将事先准备好的图片显现出来
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_1"
/>
AlertDialog
可以在当前界⾯弹出⼀个对话框,这个对话框是置顶于所有界
⾯元素之上的,能够屏蔽其他控件的交互能⼒
一般用来防⽌⽤户误删重要内
容,在删除前弹出⼀个确认对话框。
修改MainActivity中的代码
override fun onClick(v: View?) {
when (v?.id) {
R.id.button -> {
AlertDialog.Builder(this).apply {
setTitle("This is Dialog")
setMessage("Something important.")
setCancelable(false)
setPositiveButton("OK") { dialog, which ->
}
setNegativeButton("Cancel") { dialog, which ->
}
show()
}
}
}
android:orientation
属性指
定了排列⽅向是
vertical
如:垂直排列
android:orientation="vertical"
水平排列
android:orientation="horizontal"
如果
LinearLayout
的排列⽅向是
horizontal
,内部的控件就
绝对不能将宽度指定为
match_parent
如果 LinearLayout的排列⽅向是
vertical
,内部的控件就不能将⾼度指定为
match_parent
。
否则,单独⼀个控件就会将整个
⽔平⽅向占满,其他的控件就没有可放置的位置了。
android:gravity
⽤于指定⽂字在控件中的对⻬⽅式,⽽android:layout_gravity
⽤于指定控件在布局中的对⻬⽅式。
当
LinearLayout
的排列⽅向是
horizontal
时,只有垂直⽅向上的对⻬⽅式才会⽣效。因为此时⽔平⽅向上的⻓度是不固定的,每添加⼀个控件,⽔平⽅向上的⻓度都会改变,因⽽⽆法指定该⽅向上的对⻬⽅式。同样的道理,当LinearLayout的排列⽅向是vertical时,只有⽔平⽅向上的对⻬⽅式才会⽣效。
android:layout_weight
。这个属性允许我们使⽤⽐例的⽅式来指定控件的⼤⼩,它在⼿机屏幕的适配性⽅⾯可以起到⾮常重要的作⽤。
android:layout_weight
属性的值同时指定为
1
就会平分屏幕宽度
RelativeLayout
⼜称作相对布局
android:layout_above
属性可以让⼀个控件位于另⼀个控件的上⽅, 需要为这个属性指定相对控件id的引⽤。其他的属性也是相似的,
android:layout_below表⽰让⼀个控件位于另⼀个控件的下⽅,android:layout_toLeftOf表⽰让⼀个控件位于另⼀个控件的左侧,android:layout_toRightOf表⽰让⼀个控件位于另⼀个控件的右侧。注意,当⼀个控件去引⽤另⼀个控件的id
时,该控件⼀定要定义在引⽤控件的后⾯,不然会出现找不到id的情况。
引⼊标题栏布局
只需要添加
<include layout="@layout/title" />
如:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include layout="@layout/title" />
</LinearLayout>
最常⽤和最难⽤的控件:ListView
ListView
允许⽤户通过⼿指上下滑动的⽅式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据会滚动出屏幕。你其实每天都在使⽤这个控件,⽐如查看QQ
聊天记录,翻阅微博最新消息, 等等。
ListView
中的
标准写法
在
getView()
⽅法中,⾸先使⽤
LayoutInflater
来为这个⼦项加载我们 传⼊的布局。LayoutInflater
的
inflate()
⽅法接收
3
个参数,前两个 参数我们已经知道是什么意思了,第三个参数指定成false
,表⽰只让我们在⽗布局中声明的layout
属性⽣效,但不会为这个
View
添加⽗布局。因为⼀旦View
有了⽗布局之后,它就不能再添加到
ListView
中了。
getView()
⽅法中还有⼀个
convertView
参数,这
个参数⽤于将之前加载好的布局进⾏缓存,以便之后进⾏重⽤,我们可以
借助这个参数来进⾏性能优化。
更强⼤的滚动控件:
RecyclerView
如果我们想实现横向滚动的话,
ListView
是做不到的。
为此,
Android
提供了⼀个更强⼤的滚动控件
——RecyclerView
。它可以 说是⼀个增强版的ListView
,不仅可以轻松实现和
ListView
同样的效果,还优化了ListView
存在的各种不⾜之处。⽬前
Android
官⽅更加推荐使⽤RecyclerView,未来也会有更多的程序逐渐从
ListView
转向 RecyclerView
RecyclerView
的基本⽤法
每当修改了任何
gradle
⽂件,
Android Studio
都弹出⼀个
这个提⽰告诉我们,
gradle
⽂件⾃上次同步之后⼜发⽣了变化,需要再次同步才能使项⽬正常⼯作。这⾥只需要点击“Sync Now”
就可以了,然后gradle会开始进⾏同步,把我们新添加的
RecyclerView
库引⼊项⽬当中。
在RecyclerView尝试实现⼀下横向滚动的效果。 ⾸先要对fruit_item布局进⾏修改,因为⽬前这个布局⾥⾯的元素是⽔平排列的,适⽤于纵向滚动的场景,⽽如果我们要实现横向滚动的话,应该把fruit_item
⾥的元素改成垂直排列才⽐较合理。
制作9-Patch图⽚
在
Android Studio
中,我们可以将任何
png
类型的图⽚制作成
9-Patch
图⽚。⾸先对着message_left.png
图⽚右击→Create 9-Patch fifile然后保持默认⽂件名就可以了,其实就相当于创建了⼀张以9.png为后缀的同名图⽚,点击“Save”完成保存。
按住
Shift
键拖动可以进⾏擦除我们绘制的小黑点
延迟初始化和密封类
延迟初始化使⽤的是
lateinit
关键字,它可以告诉
Kotlin
编译器,我会在晚些时候对这个变量进⾏初始化,这样就不⽤在⼀开始的时候将它赋值为null了。
使⽤
lateinit
关键字也不是没有任何⻛险,如果我们在
adapter变量还没有初始化的情况下就直接使⽤它,那么程序就⼀定会崩溃,并且抛出⼀个UninitializedPropertyAccessException
异常。
所以,当你对⼀个全局变量使⽤了
lateinit
关键字时,请⼀定要确保它在被任何地⽅调⽤之前已经完成了初始化⼯作,否则Kotlin
将⽆法保证程序的安全性。