日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Andorid自定义attr的各种坑

發(fā)布時(shí)間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Andorid自定义attr的各种坑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文來(lái)自網(wǎng)易云社區(qū)

作者:孫有軍


在開(kāi)發(fā)Andorid應(yīng)用程序中,經(jīng)常會(huì)自定義View來(lái)實(shí)現(xiàn)各種各樣炫酷的效果,在實(shí)現(xiàn)這吊炸天效果的同時(shí),我們往往會(huì)定義很多attr屬性,這樣就可以在XML中配置我們想要的屬性值,以下就是定義屬性值可能遇到的各種坑。

大家都知道怎么定義attr屬性,一般如下:

<declare-styleable?name="Sample"><attr?name="custom"?format="string|reference"?/></declare-styleable>

先聲明一個(gè)styleable名稱,name名稱最好見(jiàn)名知義,一個(gè)styleable里面可以有多個(gè)attr屬性,每一個(gè)attr都含有一個(gè)name,同時(shí)需要指明所能賦值的類(lèi)型,這是是依靠format來(lái)定義的。定義好之后就可以在自定義View中使用,來(lái)實(shí)現(xiàn)各種吊炸天的效果,使用如下: xml中使用:

<com.sample.ui.widget.Custom???android:id="@+id/custom_view"???android:layout_width="130dp"???android:layout_height="130dp"???android:layout_gravity="center_horizontal"???android:layout_marginTop="90dp"???app:text="@string/custom_desc"/>

記得聲明 xmlns:app="http://schemas.android.com/apk/res-auto", app 可以隨便取名 代碼中獲取值:

TypedArray?a?=?context.obtainStyledAttributes(attrs,?R.styleable.Sample);
String?value?=?a.getString(R.styleable.Sample.custom);
a.recycle();

根據(jù)format不同,還有g(shù)etDimension,getColor等方式獲取值。

上面只是描述了一般定義的方式,但他不是今天的主題,今天的主題是可能遇到的各種坑:

1:項(xiàng)目中只包含一個(gè)attr.xml,出現(xiàn) Attribute "custom" has already been defined,參考鏈接

<declare-styleable?name="Sample"><attr?name="custom"?format="string|reference"?/></declare-styleable><declare-styleable?name="Sample1"><attr?name="custom"?format="string|reference"?/></declare-styleable>

如上聲明了兩個(gè)styleable,同時(shí)包含了相同的屬性custom,這時(shí)在編譯時(shí)會(huì)提示Attribute "xxx" has already been defined,表示相同屬性重復(fù)定義,相同styleable name不能再同一個(gè)attr.xml中重復(fù)定義,styleable name不一致attir也不能重復(fù)定義,attr format屬性不影響重復(fù)定義結(jié)果。因此可以采用如下方法解決該問(wèn)題:

a:重命名相同屬性名,將其中一個(gè)改為不同的名字 b:提取重復(fù)定義attr,作為公共屬性,方式如下:

<attr?name="custom"?format="string|reference"?/><declare-styleable?name="Sample"><attr?name="custom"?/></declare-styleable><declare-styleable?name="Sample1"><attr?name="custom"?/></declare-styleable>

2: 項(xiàng)目中引用了多個(gè)外部項(xiàng)目,出現(xiàn) Attribute "custom" has already been defined 不同的導(dǎo)入項(xiàng)目中,可能包含多個(gè)attr.xml,這樣在定義時(shí)極有可能重復(fù)定義,他又分為如下兩種情況:

a: 主項(xiàng)目,引用庫(kù)包含同名styleable name,如: 主項(xiàng)目:

<declare-styleable?name="Sample"><attr?name="custom"?/></declare-styleable>

引用庫(kù):

<declare-styleable?name="Sample"><attr?name="custom"?/></declare-styleable>

這種情況下,編譯是不會(huì)出現(xiàn)錯(cuò)誤的,可以正常編譯。

b: 主項(xiàng)目,引用庫(kù)包含不同名styleable,但是有同名attr,如; 主項(xiàng)目:

<declare-styleable?name="Sample"><attr?name="custom"?/></declare-styleable>

引用庫(kù):

<declare-styleable?name="Sample1"><attr?name="custom"?/></declare-styleable>

編譯時(shí)會(huì)出現(xiàn) Attribute "custom" has already been defined。由此可以得出,在項(xiàng)目中引用各種庫(kù),模塊時(shí),各個(gè)不同的模塊定義attr,要遵循以下規(guī)則, 1:全部不能重復(fù)定義,全部不能重復(fù)很難實(shí)現(xiàn),不同的團(tuán)隊(duì),不同的產(chǎn)品是極有可能重復(fù)定義,因此該方式很難實(shí)現(xiàn)。 2:各個(gè)不同模塊,定義時(shí)加上模塊前綴,這種方式重復(fù)幾率就小很多,編譯時(shí)再將重復(fù)的重命名就ok了。


網(wǎng)易云免費(fèi)體驗(yàn)館,0成本體驗(yàn)20+款云產(chǎn)品!

更多網(wǎng)易研發(fā)、產(chǎn)品、運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)?jiān)L問(wèn)網(wǎng)易云社區(qū)。


相關(guān)文章:
【推薦】?GDB抓蟲(chóng)之旅(上篇)
【推薦】?客戶端SDK測(cè)試思路

轉(zhuǎn)載于:https://www.cnblogs.com/163yun/p/9698957.html

總結(jié)

以上是生活随笔為你收集整理的Andorid自定义attr的各种坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。