android自定義空間
㈠ Android之自定義控制項
一、簡單自定義控制項MyButton
每一個控制項都是一個java類,有對應的代碼,只要你能正確的編寫java代碼,那麼電腦培訓發現可以創造出符合你需求的控制項,即自定義控制項。
1.通過繼承的方式,創建自定義控制項
通過繼承一個現有的控制項,覆蓋其界面的呈現
通過繼承一個包含若乾子控制項的布局
通過繼承一個現有的控制項,覆蓋某個響應事件
繼承一個View來完整自定義一個心控制項
2.使你的自定義控制項繼承自某個最接近的Android控制項,必須是public
一般都會調用父類的構造方法,注意一般有三個構造方法
覆蓋原來控制項的方法,注意是否要再調用super中的方法
在XML中以類全名的方式引用此控制項
二、復雜自定義控制項MyLogin
需要設計包含一組控制項的自定義控制項就需要用到復雜的自定義控制項
1)使得你的自定義控制項繼承自某個接近的布局
2)正確的實現構造方法:構造方法中實例化目標布局,同時查找到各個子布局
3)添加相應的響應代碼來修改屬性,使得外部能訪問布局中的子控制項
4)在XML中以類全名的方式引用此控制項,完整的包名+類名。
㈡ Android自定義控制項 怎樣設置內邊距
自定義控制項,實質是重寫某個控制項的方法和屬性,同時也繼承父控制項的方法和屬性,比如內邊距,設置自定義控制項內邊距的方法: 在xml布局文件中使用標簽: android:padding="", android:paddingLeft="", android:paddingTop="", android:bottom="" 如果想要設置外邊距,使用下面標簽: android:layout_margin="",android:layout_marginLeft,android:layout_marginRight,android:layout_marginTop,android:layout_marginBottom
㈢ Android 自定義控制項 layout
Android 繪制流程
View :View主要執行layout方法,使用 serFrame 方法來設置本身 View 的四個頂點的位置,確定View本身的位置。
ViewGroup :ViewGroup主要執行onLayout方法,遞歸遍歷所有子View,確定子View的位置。
我們來看ViewRootImpl中的 performLayout() 方法
看到這里,那host.getMeasuredWidth() / host.getMeasuredHeight()是什麼?它是直接調用View中的方法,其實就是經過measure後的DecorView的測量寬度和高度。在 Android 自定義控制項 measure 中有說明。
2.3.2.1 我們先來看ViewGroup中的 layout() 方法
ViewGroup裡面的layout最終會調入到父類View中的layout,View的layout後面講解。這里可以先告訴大家,最終會調用View的onLayout方法,而ViewGroup的onLayout是抽象方法,所以它的子類LinearLayout必須要實現。
2.3.2.2 我們再來看LinearLayout中的 onLayout() 方法。
2.3.2.3 挑一個縱向的吧,我們再來看LinearLayout中的 layoutVertical() 方法。
2.3.2.4 我們再來看LinearLayout中的 setChildFrame() 方法。
又一次回到了View的layout方法,接下來就看View分發的layout。
我們先來看View中的 layout() 方法。
我們先來看View中的 onLayout() 方法。
空空如也,其實View的布局由父容器決定,所以空實現是正常的,當然也可以在自定義View中進行更改。
《Android 視圖模塊 全家桶》
Android開發之自定義控制項(二)---onLayout詳解
自定義View Layout過程 - 最易懂的自定義View原理系列(3)
㈣ 【Android】自定義Spinner控制項及其使用
一、簡單使用
1. 寫選項值
在res/values/文件夾下新建一個 arrays.xml 文件:
2. 在界面文件中添加Spinner控制項
activity_main.xml 文件:
2.1 dropdown模式
效果:
2.2 dialog模式
效果:
二、自定義dropdown樣式
1. 修改點擊樣式和下拉框樣式
在res/drawable/文件夾下新建兩個文件:
(1)shape_for_custom_spinner.xml 文件(用來定義下拉框的樣式):
(2)selector_for_custom_spinner文件(用來定義Spinner控制項本身的樣式,帶選擇器,有點擊效果):
在界面文件中的Spinner控制項中引用它們:
效果:
2. 增加下劃線
在res/values/文件夾下新建一個style.xml文件:
說明: (1)customTheme——自定義主題樣式,引用它自定義下劃線才能正常顯示。 (2)customSpinnerStyle——自定義的Spinner樣式,和上面的主題樣式一樣在界面文件中引用。 (3)android:divider——分割線顏色。 (4)android:dividerHeight——分割線寬度。
在界面文件中的Spinner控制項中引用它:
效果:
三、動態配置Spinner選項
1. 刪除界面文件中引入的字元串組
即,刪除這一行:
2. 增加一個自定義的layout文件來配置列表樣式
在res/layout/文件夾下新建一個item_for_custom_spinner.xml文件:
3. 在Java文件中對Spinner控制項進行配置
MainActivity.java文件:
說明: 不想自己自定義列表樣式可以選擇直接使用Android自帶的support_simple_spinner_dropdown_item 效果:
四、Spinner選擇事件
1. 增加一個簡單的選擇監聽器
可以發現有兩個問題: (1)初始化監聽器的時候事件被調用了。 (2)重復點擊同一選項事情不會被重復調用。
2. 不希望監聽器動作初始化時就被調用
辦法很簡單,就是定義一個flag用來確認監聽器是否是第一次被調用,是則忽略它:
這樣一來,界面初始化時就不會出現監聽器動作被執行了一次的情況了。
3. 不希望重復點擊同一選項時沒有動作
需要重寫Spinner控制項的部分代碼。
(1)在java/com.example.myapplication/文件夾下新建一個ReSpinner.java文件:
(2)替換掉界面文件中的控制項根名稱,其他什麼都不用動: 將
改為
這樣一來,重復點擊同一事件,也能正常多次觸發監聽器動作了。
五、自定義dialog樣式
經過上面的修改,基本已經完成了對dropdown模式下的樣式自定義和監聽器動作自定義了,將spinnerMode改回dialog,增加一個prompt標簽,增加dialog的標題:
(1)先在res/values/strings.xml文件中定義一個標題(必須步驟):
(2)再在邊界文件中引用它: