2020.8.7
View是所有控件的父類(lèi),因此View具有的屬性乓旗,其他控件也具有,下面將詳細(xì)列出View的常用屬性
一.常用屬性
屬性名 | 說(shuō)明 | 使用方式展示或效果 |
---|---|---|
background | 其值可以是color中的 某種顏色,也可以是 一個(gè)代表某種顏色的 固定值,還可以是一 張圖片咽安,或是一個(gè)xml資源 |
android:background="#673AB7" android:background="@color/colorAccent" android:background="@drawable/wiwi" |
alpha | 設(shè)置背景的透明度 0表示完全透明 1表示完全不透明 |
android:alpha="0.5"?半透明 通過(guò)連續(xù)改變alpha的值可以實(shí)現(xiàn)淡入淡出 的動(dòng)畫(huà)效果 |
clickable | 設(shè)置控件是否可以被點(diǎn)擊 默認(rèn)是可以被點(diǎn)擊的 |
android:clickable="false" 設(shè)置為不能接受用戶(hù)的點(diǎn)擊事件 |
focusable | 是否可以獲取焦點(diǎn) 與clickable搭配使用 |
android:focusable="true" |
id | 標(biāo)識(shí)控件 使其在容器中唯一被找到 |
android:id="@+id/view" 這里view是該控件的名稱(chēng)毅糟,可以修改 |
tag | 標(biāo)簽,與id相類(lèi)似渺绒,唯一標(biāo)識(shí)控件 | android:tag="1" 通常用來(lái)記錄數(shù)據(jù) |
onClick | 當(dāng)該控件被點(diǎn)擊時(shí)執(zhí)行設(shè)定的方法 | android:onClick="changeColor" Alt+回車(chē)主到,會(huì)自動(dòng)添加changeColor這個(gè)方法 |
visibility | 設(shè)置控件是否可見(jiàn) | android:visibility="visible" invisible--不可見(jiàn)塔鳍,有實(shí)際布局 gone--消失,沒(méi)有實(shí)際布局 |
注:只有在Kotlin中才可以通過(guò)id找到控件
二.監(jiān)聽(tīng)事件
在上面屬性中情连,onClick屬性就是為控件添加監(jiān)聽(tīng)事件,但有的時(shí)候xml的解析不太穩(wěn)定倘是,所以有可能找不到實(shí)現(xiàn)的方法轰传,因此不建議使用onClick的方式添加監(jiān)聽(tīng)叉存,下面將介紹其他幾種通過(guò)實(shí)現(xiàn)接口添加監(jiān)聽(tīng)事件的方式
view.setOnClickListener(OnClickListener的一個(gè)對(duì)象)练俐,通過(guò)此方法設(shè)置監(jiān)聽(tīng)者,當(dāng)控件被點(diǎn)擊時(shí)會(huì)調(diào)用onClick方法
- 當(dāng)前Activity實(shí)現(xiàn)OnClickListener接口蔼紧,回調(diào)給當(dāng)前這個(gè)類(lèi)菩貌,自己監(jiān)聽(tīng)事件
class MainActivity : AppCompatActivity() ,View.OnClickListener{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
view.setOnClickListener(this)
}
override fun onClick(v: View?) {
Log.v("cx","被點(diǎn)擊了")
}
}
- 聲明一個(gè)類(lèi)仇参,讓其實(shí)現(xiàn)OnClickListener接口诈乒,回調(diào)給另外一個(gè)對(duì)象导饲,別人監(jiān)聽(tīng)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
view.setOnClickListener(myListener())
}
class myListener:View.OnClickListener{
override fun onClick(v: View?) {
Log.v("cx","控件被點(diǎn)擊了")
}
}
}
- 匿名內(nèi)部類(lèi)的方式
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
view.setOnClickListener(object :View.OnClickListener{
override fun onClick(v: View?) {
Log.v("cx","控件被點(diǎn)擊了")
}
})
}
}
- 因?yàn)镺nClickListener中只有一個(gè)方法,可以使用Lambda表達(dá)式,另外setOnClickListener()方法的最后一個(gè)參數(shù)是Lambda表達(dá)式媳溺,而且還只有一個(gè)參數(shù)蝎困,所以可以進(jìn)行如下的化簡(jiǎn)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
view.setOnClickListener {
Log.v("cx", "控件被點(diǎn)擊了")
}
}
}
顯然以上4中方式蒲稳,最后一種最簡(jiǎn)便,并且也是最常用的方式
關(guān)于接口實(shí)現(xiàn)監(jiān)聽(tīng)的方式领斥,并進(jìn)行數(shù)據(jù)回調(diào)月洛,可以參考下面一篇文章
關(guān)于接口實(shí)現(xiàn)數(shù)據(jù)回調(diào)即代理者模式
- 由于Kotlin的特性,這里還可以使用高階函數(shù)接收回調(diào)事件
由于系統(tǒng)的控件沒(méi)有這種方式嚼黔,所以只能自己手動(dòng)創(chuàng)建進(jìn)行模擬觸發(fā)過(guò)程
class myView {
//1.定義接收回調(diào)的函數(shù)/方法
var callBack:((String)->Unit)?=null
//2.事件觸發(fā)
fun performClick(){
callBack?.let {
it("user:cx")
}
}
}
----------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//4.創(chuàng)建對(duì)象
val myview=myView()
//5.接收回調(diào)
myview.callBack={
Log.v("cx","接收到了回調(diào)數(shù)據(jù):$it")
}
view.setOnClickListener {
myview.performClick()
}
}
}
這種方式不用再使用接口唬涧,簡(jiǎn)便很多
三.資源文件shape
上文已提到view的background可以是xml的資源文件,下面介紹常用的一種資源shape捧搞,用來(lái)設(shè)置view的圓角
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
設(shè)置半徑
<corners android:radius="5dp"/>
畫(huà)筆狮荔,設(shè)置顏色以及粗細(xì)
<stroke android:color="@color/colorAccent"
android:width="2dp"/>
填充固定顏色
<solid android:color="@color/colorPrimary"/>
設(shè)置顏色漸變
<gradient
linear:線性 sweep:掃射式
android:type="linear"
android:startColor="@color/colorAccent"
android:centerColor="@color/colorPrimary"
android:endColor="@color/colorPrimaryDark"/>
</shape>
常用的僅僅是設(shè)置線邊框,填充色很少用创坞,另外xml和將背景設(shè)置為固定色不能同時(shí)使用受葛,后設(shè)置的顏色會(huì)覆蓋xml,就不會(huì)展示圓角效果