模擬器 1:

模擬器 2

如何在不同模擬器上的按鈕上保持相同的文本大小?我正在使用這些代碼行來設定保持比例的相對大小,但是當我在 2 個不同的模擬器(真實模擬器)上運行程式時,文本的大小變得很瘋狂
代碼片段
btn_play_game1.post(new Runnable() {
@Override
public void run() {
btn_play_game1.setTextSize((float) (btn_play_game1.getHeight() * btn_play_game1.getWidth() * 0.00013));
}
});
此外,我在我的xml檔案中使用 LinearLayout ,如果這很重要。
uj5u.com熱心網友回復:
你在打電話setTextSize(float):
將默認文本大小設定為給定值,解釋為“縮放像素”單位。此大小根據當前密度和用戶字體大小首選項進行調整。
假設兩個模擬器都設定為相同的系統字體大小(這也會使文本更大或更小),問題是您已經通過以像素為單位獲取按鈕的尺寸來提供最終的縮放尺寸。但是該方法需要一個大小 in sp,一個與密度無關的大小,它將根據設備的螢屏密度和用戶的字體首選項進行縮放。所以螢屏解析度越高,放大的越多
這里有三個選項:
- 您可以使用此方法并計算出
sp要使用的正確值(取決于文本應該看起來有多大,嘗試 24 并從那里開始) - 同樣,這將取決于用戶的偏好而變大或變小 - 使用setTextSize(int, float)方法并傳遞
TypedValue.COMPLEX_UNIT_PX第一個引數,并將您計算的像素大小作為第二個引數。這樣,文本大小將始終與您計算它的方式的按鈕大小成正比,并且用戶的字體大小首選項不會進入其中。您必須更改該0.00013值,因為這正是您傳遞sp值時發生的作業 - 或者,如果可以的話(例如,如果按鈕是固定大小),只需在您的 XML 中定義文本大小。如果您希望它占用固定數量的空間(無用戶縮放),請使用
dp值而不是sp- 某些文本不需要縮放
另外,這是一種計算比率的奇怪方法,我認為在這種情況下,您通常只取高度的一小部分以保持一致性,或者minOf(height, width)如果寬度可變,則做一些事情- 但隨后您就會陷入測量的復雜性文本以查看它需要適合什么,并且讓布局系統處理所有這些更容易。在 XML 中有很多方法可以做到,但那是另一回事了
uj5u.com熱心網友回復:
這可能是因為您使用 sp 單位設定了文本大小。該單位基于螢屏而不是物理單位。您應該使用基于物理單位的單位來在每個設備上獲得相同的視圖。您可以使用 mm(毫米)、in(英寸)或 pt(點,我認為是 1/62 英寸)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/398937.html
上一篇:AndroidStudioKotlinRoom資料庫錯誤
下一篇:使用Flutter和“flutter_fft”插件創建吉他調音器,努力將BottomNavigationBar與調音器的StatefulWidget結合起來
