Android開(kāi)發(fā)控件篇——View的基本屬性與點(diǎn)擊事件

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方法

  1. 當(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)擊了")
    }
}
  1. 聲明一個(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)擊了")
        }
    }
}
  1. 匿名內(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)擊了")
            }
        })
    }
}
  1. 因?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)即代理者模式

  1. 由于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()
        }
    }
}
高階函數(shù)實(shí)現(xiàn)回調(diào)圖解.png

這種方式不用再使用接口唬涧,簡(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ì)展示圓角效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末总滩,一起剝皮案震驚了整個(gè)濱河市纲堵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闰渔,老刑警劉巖席函,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冈涧,居然都是意外死亡茂附,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)督弓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)营曼,“玉大人,你說(shuō)我怎么就攤上這事愚隧。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵录煤,是天一觀的道長(zhǎng)鳄厌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妈踊,這世上最難降的妖魔是什么了嚎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮响委,結(jié)果婚禮上新思,老公的妹妹穿的比我還像新娘。我一直安慰自己赘风,他們只是感情好夹囚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邀窃,像睡著了一般荸哟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞬捕,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天鞍历,我揣著相機(jī)與錄音,去河邊找鬼肪虎。 笑死劣砍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扇救。 我是一名探鬼主播刑枝,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼迅腔!你這毒婦竟也來(lái)了装畅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沧烈,失蹤者是張志新(化名)和其女友劉穎掠兄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锌雀,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚂夕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腋逆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片双抽。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闲礼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤柬泽,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布慎菲,位于F島的核電站,受9級(jí)特大地震影響锨并,放射性物質(zhì)發(fā)生泄漏露该。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一第煮、第九天 我趴在偏房一處隱蔽的房頂上張望解幼。 院中可真熱鬧,春花似錦包警、人聲如沸撵摆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)特铝。三九已至,卻和暖如春壹瘟,著一層夾襖步出監(jiān)牢的瞬間鲫剿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工稻轨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灵莲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓殴俱,卻偏偏與公主長(zhǎng)得像政冻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粱挡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359