導航:首頁 > 操作系統 > android自定義控制項的步驟

android自定義控制項的步驟

發布時間:2023-12-08 18:30:24

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自定義各種酷炫控制項

首先,為什麼需要自定義View?

1. 現有的View滿足不了你的需求,也沒有辦法從已有控制項派生一個出來;界面元素需要自己繪制。
2. 現有View可以滿足要求,把它做成自定義View只是為了抽象:為這個自定義View提供若干方法,方便調用著操縱View。通常做法是派生一個已有View,或者結合xml文件直接inflate。

目前常用的基本上是第二種方式,這種方式非常簡單,與通常的View使用方法基本相同,但是作用卻異常強大,擁有了這一層抽象,代碼更加整潔也更容易維護,通過抽取自定義View的公共操作方法也減少了冗餘代碼,雖然簡單,但不可忽視。

大多數人感覺神秘的應該是第一種,自繪控制項,完全自定義;但其實這兩種方式歸根結底全部都是自繪;不信你去看看TextView的源碼。只不過通常情況下系統幫我們繪制好了一些控制項給開發者使用;OK,接下來就是一個問題。

在講述之前我還是啰嗦地重申一下,復用已有View是最最常用也最有效的自定義View方式,必須熟練使用。

其次,如何自定義View?

想一下,一個View給用戶最直觀的感知是什麼?靜止的形態和動態的操作。靜止的形態意思就是一個View呈現到用戶眼裡長成啥樣子?動態操作指的是,用戶與View之間可以有哪些交互?點擊滑動View的不同地方會有什麼反應?

1. 靜態

如果一個自定義View的樣式都沒有辦法繪制出來,那麼後續的交互就是空談了;我們一步步分解這個問題。

1.1 你的自定義View分為哪幾個部分?是所有的部分都需要手動繪制還是只有一部分——找出需要完全自定義的部分,其他的部分用已有View實現。

1.2 你的自定義View的每個部分長成什麼樣,佔用多大空間——結合理論知識View的measure過程,比如match_parent, wrap_content結合父View的laout_params參數最終測量大小是多少?

1.3 你的自定義View每個部分擺放在哪?相對位置如何?——View的layout過程。

1.4 你的自定義View那些完全需要手動繪制的部分是什麼樣,如何繪制?

你得學會操縱Canvas,學會2D繪圖,什麼?你跟我說3D,OpenGL?學會這些再說。

㈢ android自定義控制項之文件選擇

不多說,先上圖:

列舉當前目錄下的所有文件,如果是選擇目錄,則不顯示文件,如果是選擇文件,則需要顯示文件。

新建目錄,就是在當前路徑下新建目錄,同時新建後的目錄要能夠及時顯示在文件列表中。

需要讀寫許可權,添加第三方許可權請求庫:

使用:

DialogFragment與Dialog有一些不同的地方,其中show方法需要傳入FragmentManager

另外需在onCreateVie方法初始化布局,以及獲取到控制項

另外就是RecycleView,之所以採用RecycleView,是因為發現如果用ListView,內存會不斷增加,很難降下來。

其中CommonAdapter繼承自BaseAdapter,是通用的Adapter,兼容ListView:

這一部分邏輯有FileProvider類完成; 這里需要注意的是,有些手機不支持讀取根目錄,所以改為讀取"/mnt/"作為根目錄就行讀取。

另外跳轉目錄都是改變當前路徑,然後再刷新數據。

同時在其內部定義了FileData類:

文件選擇,可以通過當前路徑路徑以及列表索引來唯一確定路徑;都是,當跳轉目錄後,索引應該重置。

這里採用WeakReference記錄選擇的控制項,但選擇其他目錄或者文件時,之前的控制項需要重置一下狀態。

https://github.com/xiaoyifan6/videocreator

該源碼主要用於圖片合成gif或者視頻,其中文件選擇彈窗是自己寫的。感覺這個彈出應該有許多地方可以用到,所以寫下這篇文章,方便以後參考查看。

㈣ Carson帶你學Android:手把手教你寫一個完整的自定義View

自定義View一共分為兩大類,具體如下圖:

對於自定義View的類型介紹及使用場景如下圖:

在使用自定義View時有很多注意點(坑),希望大家要非常留意:

View的內部本身提供了post系列的方法,完全可以替代Handler的作用,使用起來更加方便、直接。

主要針對View中含有線程或動畫的情況: 當View退出或不可見時,記得及時停止該View包含的線程和動畫,否則會造成內存泄露問題

當View帶有滑動嵌套情況時,必須要處理好滑動沖突,否則會嚴重影響View的顯示效果。

接下來,我將用自定義View中最常用的 繼承View 來說明自定義View的具體應用和需要注意的點

在下面的例子中,我將講解:

下面我將逐個步驟進行說明:
步驟1:創建自定義View類(繼承View類)

特別注意:

步驟2:在布局文件中添加自定義View類的組件及顯示

至此,一個基本的自定義View已經實現了,運行效果如下圖。

接下來繼續看自定義View關於屬性自定義的問題:

先來看wrap_content & match_parent屬性的區別

如果不手動設置支持 wrap_content 屬性,那麼 wrap_content 屬性是不會生效(顯示效果同 match_parent )

padding 屬性:用於設置控制項內容相對控制項邊緣的邊距;

如果不手動設置支持padding屬性,那麼padding屬性在自定義View中是不會生效的。

繪制時考慮傳入的padding屬性值(四個方向)。

除了常見的以android:開頭的系統屬性(如下所示),很多場景下自定義View還需要系統所沒有的屬性,即自定義屬性。

實現自定義屬性的步驟如下:

下面我將對每個步驟進行具體介紹

對於自定義屬性類型 & 格式如下:

至此,一個較為規范的自定義View已經完成了。

Carson_Ho的github: 自定義View的具體應用

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

㈤ 如何打造Android自定義的下拉列表框控制項

實現方式:
1、水平布局一個TextView和一個ImageView(小黑箭頭)
2、實現點擊ImageView的單擊事件,彈出PopupWindow
3、PopupWindow中實現下拉列表
關鍵代碼示例:
1、布局

<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView/>
<ImageView />
</LinearLayout>
2、單擊事件

image.setBackgroundResource(R.drawable.gerendang_jiantou);
image.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//彈出popupwindow
}
});
3、pupupwindow相關代碼
ListView lv = new ListView(this);
adapter = new OptionsAdapter(context, datas); // 根據數據,設置下拉框顯示
list.setAdapter(adapter);

/**
* 兩種不同長度的下拉框,主要是為了適應屏幕的大小
*/
if (p_width > 0) {
pWindow = new PopupWindow(v, par.getWidth(), 150);
} else {
pWindow = new PopupWindow(v, par.getWidth(), 300);
}
pWindow.setFocusable(true); //能夠焦點獲得
pWindow.setBackgroundDrawable(new BitmapDrawable()); //設置背景
pWindow.setOutsideTouchable(true); //外部點擊關閉
pWindow.update(); //更新位置

㈥ Android 橫向布置控制項,縱向時間軸控制項(步驟,快遞,時間軸)

使用自定義控制項,先計算得到每個圓心的x軸坐標,然後繪制出圓心,源李鎮長條,擾罩文字

StepView.java

使用方法

ps:

使用RecyclerView通過控雹粗製item的顯示隱藏即可實現

item.xml

ativity.xml

Adapter.java

閱讀全文

與android自定義控制項的步驟相關的資料

熱點內容
伺服器內存不夠怎麼擴展 瀏覽:841
java獲取byte 瀏覽:55
eth對抗量子加密 瀏覽:877
vs2013可以用c編譯器嗎 瀏覽:376
下載的ios要解壓嗎 瀏覽:5
通達信pvi指標源碼 瀏覽:640
鄭州綠城通行app怎麼使用 瀏覽:314
雲南中文版伺服器託管雲空間 瀏覽:124
寬頻伺服器無響應是什麼情況 瀏覽:450
醫易時空醫學pdf 瀏覽:389
菠蘿筆記app怎麼樣 瀏覽:298
查看mysql表的命令 瀏覽:684
pomelo命令 瀏覽:840
51單片機音樂有延時 瀏覽:932
怎麼在appstore注銷 瀏覽:863
伺服器怎麼給別人發錢 瀏覽:94
路虎攬勝更換壓縮機 瀏覽:369
rediszset源碼解析 瀏覽:823
安卓如何設置自製鈴聲 瀏覽:573
java打開文件夾路徑 瀏覽:552