當前位置:首頁 » 安卓系統 » android設置寬高

android設置寬高

發布時間: 2025-08-26 05:01:00

Ⅰ Android 自定義View:為什麼你設置的wrap_content不起作用

在使用自定義View時,View寬 / 高的 wrap_content 屬性不起自身應有的作用,而且是起到與 match_parent 相同作用。

其實這里有兩個問題:

請分析 & 解決問題之前,請先看自定義View原理中 (2)自定義View Measure過程 - 最易懂的自定義View原理系列

問題出現在View的寬 / 高設置,那我們直接來看自定義View繪制中第一步對View寬 / 高設置的過程:measure過程中的 onMeasure() 方法

繼續往下看 getDefaultSize()

從上面發現:

那麼有人會問:wrap_content和match_parent具有相同的效果,為什麼是填充父容器的效果呢?

我們知道,子View的MeasureSpec值是根據子View的布局參數(LayoutParams)和父容器的MeasureSpec值計算得來,具體計算邏輯封裝在getChildMeasureSpec()里。

接下來,我們看生成子View MeasureSpec的方法: getChildMeasureSpec() 的源碼分析:

getChildMeasureSpec()

從上面可以看出,當子View的布局參數使用 match_parent 或 wrap_content 時:

所以: wrap_content 起到了和 match_parent 相同的作用:等於父容器當前剩餘空間大小

當自定義View的布局參數設置成wrap_content時時,指定一個默認大小(寬 / 高)。

這樣,當你的自定義View的寬 / 高設置成wrap_content屬性時就會生效了。

網上流傳著這么一個解決方案:

答: 是,當父View為 AT_MOST 、View為 match_parent 時,該View的 match_parent 的效果就等於 wrap_content 。上述方法存在邏輯錯誤,但由於這種情況非常特殊的,所以導致最終的結果沒有錯誤。具體分析請看下面例子:

從上面的效果可以看出,View大小 = 默認值

我再將子View的屬性改為 wrap_content :

從上面的效果可以看出,View大小還是等於默認值。

相信看到這里你已經看懂了:

為了更好的表示判斷邏輯,我建議你們用本文提供的解決方案,即根據布局參數判斷默認值的設置

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

Ⅱ Android中測量控制項的內部文字內容的寬、高度

在Android中,自定義View時通過Canvas繪制文字時,測量控制項內部文字內容的寬、高是關鍵步驟。本文將介紹幾種常用方法,旨在幫助開發者解決這一問題。

首先,可通過`Paint.measureText`方法測量文本的寬度。這是一個快捷方式,適用於快速獲取文本寬度信息。

其次,使用`Paint.getTextBounds`方法,可以獲得文字所在矩形區域,進而得到寬度和高度。該方法更為全面,適用於需要精確測量場景。

`Paint.getTextWidths`方法同樣提供每個字元的寬度信息,對於處理多字元文本布局問題非常有用。

通過`Paint.FontMetrics`或`Paint.FontMetricsInt`可以獲取高度。兩者主要區別在於精度,前者為float,後者為int,具體使用時需根據需求選擇。

獲取高度時,注意到兩個高度值略有不同,`height2`值略大於`height1`,以保證文本頂部和底部有足夠的留白。在實際應用中,需根據具體需求選擇合適的高度值。

此外,通過`Paint.getFontSpacing`和`Paint.getFontMetrics(null)`方法獲取高度,本質上是調用`Paint.getFontMetrics`實現的。獲取的高度值與`fontMetrics.descent - fontMetrics.ascent`計算結果一致。

`Layout.getDesiredWidth`方法用於獲取寬度信息,但在TextView布局中可能存在文字實際佔用高度與屬性`textSize`值不一致的問題。文檔中提示可通過設置`android:includeFontPadding`來控制是否包含上下空白。

總結而言,Android中測量文字內容寬、高有多種方法,開發者需根據具體需求選擇合適的方法。理解不同方法的特性和應用場景,有助於更精確地控制文字布局,提升應用界面的美觀性和用戶體驗。

Ⅲ android 開發的時候怎麼動態設置控制項寬高

1、獲取控制項所在的布局

java">LayoutParamspara=button.getLayoutParams();//獲取按鈕的布局

2、修改布局中的height,width屬性

para.width=200;//修改寬度
para.height=300;//修改高度

3、重新設置修改後的布局給控制項

button.setLayoutParams(para);//設置修改後的布局。
熱點內容
安卓手機拍照錄像時怎麼旋轉 發布:2025-08-26 07:51:27 瀏覽:331
雲伺服器上傳程序 發布:2025-08-26 07:46:36 瀏覽:256
盜版廣聯達加密狗升級 發布:2025-08-26 07:45:06 瀏覽:22
c語言中形參的默認存儲類別是 發布:2025-08-26 07:39:14 瀏覽:440
極限越野安卓怎麼玩 發布:2025-08-26 07:25:20 瀏覽:984
網頁配置存儲 發布:2025-08-26 07:16:15 瀏覽:467
Mu代碼編譯器 發布:2025-08-26 07:11:21 瀏覽:361
java一個程序 發布:2025-08-26 07:01:02 瀏覽:852
華為手機如何設置不要輸入密碼 發布:2025-08-26 06:51:55 瀏覽:650
期望的演算法 發布:2025-08-26 06:43:53 瀏覽:535