android自定義控件是一個 內部類 如何在xml中引用,android?自定義view屬性

android

自定義view屬性

一個完美的自定義控件也可以添加xml來配置屬性和風格。要實現這一點,可按照下列步驟來做:

1) 添加自定義屬性到xml文件中

2) 在xml的中,指定屬性的值

3) 在view中獲取xml中的值

4) 將獲取的值應用到view中

下面繼續舉例說明:

添加 到你的程序中,習慣上一般是放在res/values/attrs.xml文件中,例如:

1.

2.

3.

4.

5.

6.

7.

8.

9.

這段代碼聲明了兩個自定義的屬性 showText和labelPosition,他們屬于一個自定義的實體PieChat。

一旦定義好了屬性,就可以在xml中使用這些屬性了,下面是一個簡單的例子:

1.

2.

3.?xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">

4.

5.?custom:showText="true"

6.?custom:labelPosition="left" />

7.

可以看到和標準的Android的組件一樣,唯一的差別在他們屬于不同的命名空間,標準的組件的命名空間一般是http://schemas.android.com/apk/res/android,

而我們自定義的命名空間是http://schemas.android.com/apk/res/[your package

name]。注意到xmlns:custom中的custom了嗎?你可以使用任意的字符,但是

要和下面的控件的定義中的字符要保持一致。

另外一個需要注意的是,

xml中的tag:com.example.customviews.charting.PieChart,需要的完整的包名,如果你的自定義控件是個內部類(好吧,這么奇葩),

也必須給全路徑,假設PieChat有個內部類PieView,如果在XML中引用它,需要這樣使用:com.example.customviews.charting.PieChart$PieView

3) 應用自定義的屬性值

當View被創建的時候,可以通過AttributeSet讀取所有的定義在xml中的屬性,在構造函數中通過obtainStyledAttributes讀取attrs,

該方法會返回一個TypeArray數組。通過TypeArray可以讀取到已經定義在XML中的方法。下面的例子展示了讀取上文中的xml屬性值。

1.?public PieChart(Context context, AttributeSet attrs) {

2.?super(context, attrs);

3.?TypedArray a = context.getTheme().obtainStyledAttributes(

4.?attrs,

5.?R.styleable.PieChart,

6.?0, 0);

7.

8.?try {

9.?mShowText = a.getBoolean(R.styleable.PieChart_showText, false);

10.?mTextPos =

a.getInteger(R.styleable.PieChart_labelPosition, 0);

11.?} finally {

12.?a.recycle();

13.?}

14.?}

需要強調的是, TypeArray使用完畢后需要銷毀,不然會發生內存泄露。

4) 添加自定義的方法和事件

自定義屬性很強大,但缺點也很明顯,它只能在view初始化的時候被應用到控件中。為了添加更加靈活的行為,

可以為每一個屬性添加getter和setter

對。下面的代碼段展示了PieChat的屬性showText

1.?public boolean isShowText() {

2.?return mShowText;

3.?}

4.

5.?public void setShowText(boolean showText) {

6.?mShowText = showText;

7.?invalidate();

8.?requestLayout();

9.?}

在setShowText中調用了invalidate()和requestLayout(),

保證了view能及時的更新。在你的自定義View中,如果有屬性被改變并且需要立即生效時,

你也必須調用這個方法。 這樣系統會立即重新繪制view。

同樣的,如果view的尺寸或者形狀發生了變化,你也必須調用requestLayout(). 不然會引起

很多問題。

一般你也需要添加事件回調來和調用者溝通。 例如PieChat暴露了OnCurrentItemChanged來通知調用者pie

chat發生了旋轉。

在開發過程中,很容易忘記添加一些屬性和事件,特別是作者是這個自定義View的唯一使用者的時候。為使View有更普遍的適用性,應當花些時間考慮的更加周全。

你最好是暴露所有的可能改變外觀和行為的屬性。當然這也對你提出了更高的要求,不然怎么進不呢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271604.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦操作系統維護10條基礎知識!

電腦操作系統是電腦的核心,我們平時如何維護電腦操作系統?下面是小編分享是電腦系統維護基礎知識,一起來看一下吧。1、經常進行“磁盤清理”和磁盤碎片整理”當硬盤用久了,無數次的新增、更改和刪除程序和文件后,就會造成很多斷斷…

光子瀏覽器_煙臺招聘信息煙臺光子信息科技有限公司招聘(五險一金,餐補)...

↑煙臺招聘信息網點擊關注哦匯集煙臺市招聘信息,含蓋煙臺人才網,煙臺招聘會,煙臺招聘網、煙臺優秀企業、事業單位等優質工作崗位及招聘信息,煙臺求職找工作和煙臺兼職資訊平臺… 【溫馨提示】:因網絡詐騙現象較多&…

DES加密

DES采用了64位的分組長度和56位的密鑰長度,是對稱加密的一種。 DES的理論進化主線是 1945年Shannon大神提出的交替使用混淆(使密文與密鑰的統計關系變復雜)和擴散(使明文與密文的統計關系變復雜)的乘積密碼&#xff08…

計算機系統基礎:輸入輸出技術知識筆記

1、內存與接口的編址方式 1.1 內存和接口地址獨立編址方法 內存地址和接口地址是兩個完全獨立和相互隔離的地址空間。訪問數據的指令也不同,接口只有讀寫指令,其余都是內存指令。 特點:接口和內存指令容易區分,但接口指令太少、功…

小米max2 android p,這就是小米Max2?6.4英寸超大屏幕配置大升級

標簽:小米手機(3463)小米(3233)雖說今年上半年小米6的重磅機型會是小米6,但隨著小米Max在官方商城的下架,這款巨屏手機的更新換代產品已經在網絡上浮出水面。根據知名圖形測試網站GFXBench最新公布的信息顯示,一款代號為Oxygen的小…

winform直接控制云臺_速學指南,2分鐘學會Feiyu pocket口袋云臺的隱藏功能操作

上周三,Feiyu pocket口袋云臺相機正式發布,重量僅115g,單手可持,可拍攝 4K/60fps高清畫面;6軸混合防抖技術加持,賦予軌跡延時、全域模式、慢動作、全跟隨等模式更專業、高效的拍攝體驗。Feiyu pocket口袋云…

Python中處理DataFrame,R繪圖

IN Pythonfrom pandas import DataFrame,Seriesimport pandas as pdimport numpy as npdata pd.read_csv(rC:\Users\lxy\Desktop\工作相關\工作報告KPI\pydata-book-master\ch06\ex5.csv)data.index.namexdata.to_csv(D:\df.csv)IN R> library(ggplot2)> df <- read.…

ThreadPoolTaskExecutor和ThreadPoolExecutor區別

初學者很容易看錯&#xff0c;如果沒有看到spring或者JUC源碼的人肯定是不太了解的。 ThreadPoolTaskExecutor是spring core包中的&#xff0c;而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是對ThreadPoolExecutor進行了封裝處理。 ThreadPoolExecutor ThreadP…

電腦技巧:如何解決大部分的電腦防彈窗廣告

相信很多人都有這種情況&#xff0c;打開電腦,電腦上全部各種廣告彈窗,或者在辦公、追劇的時候,電腦突然就彈出了一條&#xff0c;是不是很煩人&#xff0c;這幾招不用借助軟件&#xff0c;就能解決彈窗的方法不防一試。 方法一&#xff1a; 第一種方法&#xff0c;可以對付部分…

c 跨平臺android,Unity 使用C/C++ 跨平臺終極解決方式(PC,iOS,Android,以及支持C/C++的平臺)...

PC的事實上根本不用說&#xff0c;畢竟C#和C交互的文章已經夠多了&#xff0c;當然我自覺得經過幾次折騰后。差點兒全部游戲須要到的操作我都掌握了(各種傳參方法&#xff0c;各種坑&#xff0c;不懂的能夠留言問。盡管基本上沒人看。哈哈)廢話不多說&#xff0c;我們主要來講兩…

hades武器第四形態解鎖_凱多的第四個技能預告——冰凍!

在《海賊王》中&#xff0c;四皇凱多被譽為“海陸空最強生物”&#xff0c;能夠變成神龍&#xff0c;如果不出意外的話&#xff0c;凱多應該是動物系幻獸種神龍果實的能力者。畢竟凱多的海賊團就叫做“百獸海賊團”&#xff0c;手下也都是動物系果實能力者&#xff0c;能夠降服…

解決git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas

今天用idea提交代碼到github上,push后報錯 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 一:原因分析 Permission denied (publickey) 沒…

轉載------------java equals 方法

作者&#xff1a;海子出處&#xff1a;http://www.cnblogs.com/dolphin0520/淺談Java中的equals和 在初學Java時&#xff0c;可能會經常碰到下面的代碼&#xff1a; 1 String str1 new String("hello"); 2 String str2 new String("hello"); 3 …

計算機系統基礎:校驗碼知識筆記

1、校驗碼概念 校驗碼主要是為了解決計算機各部件進行數據傳輸和交換&#xff0c;確保傳送過程的正確無誤&#xff0c;一是為了提高硬件電路的可靠性&#xff0c;二是提高代碼的校驗能力。通常會用校驗碼來檢查傳送的數據是否正確。 校驗碼編碼分為兩類&#xff1a;合法編碼、錯…

qml與HTML數據交互,GitHub - toby20130333/QtQuickHtmlBridge: 基于QtQuick的C++,qml,Html三者的Bridge交互...

基于QtQuick的C,qml,Html三者的Bridge交互主要功能自定義C對象并注冊到QML可以在QML中繼續擴展C對象的屬性和方法 信號等將C對象注入到WebChannelHtml中引入C對象JavaScript與C直接交互示例代碼說明main.cpp://該實例必須直接繼承自Object的 QWidget的忽略qmlRegisterType(&quo…

html為什么要進行表單驗證_化學錨栓為什么要進行拉拔試驗?

點擊箭頭處“藍色字”&#xff0c;關注我們哦&#xff01;&#xff01;化學錨栓是繼膨脹錨栓之后出現的一種新型緊固材料&#xff0c;由化學藥劑與金屬桿體組成&#xff0c;是通過特制的化學粘接劑&#xff0c;將螺桿膠結固定于砼基材鉆孔中&#xff0c;以實現對固定件錨固的復…

電路基礎知識講解(太全面了)

IT技術分享社區個人博客網站&#xff1a;https://programmerblog.xyz文章推薦程序員效率&#xff1a;畫流程圖常用的工具程序員效率&#xff1a;整理常用的在線筆記軟件遠程辦公&#xff1a;常用的遠程協助軟件&#xff0c;你都知道嗎&#xff1f;51單片機程序下載、ISP及串口基…

github設置倉庫可見性 私人倉庫設置

一:點擊Setting 二:點擊Make private 三:閱讀關于將倉庫設為私有的警告。 入您要設為私有的倉庫的名稱&#xff0c;例如 accountname/reponame。 單擊 I understand, make this repository private&#xff08;我已了解&#xff0c;請將此倉庫設為私有&#xff09;

Git合并分支操作

1. 添加自己的文件 git add .; 2. 緩存自己的文件 git stash; 3. 查看狀態 git status; 4. 獲取別的分支 git pull origin master(分支名); 5. 出棧自己的文件 git stash pop 。 轉載于:https://www.cnblogs.com/csl0910/p/5605868.html