2011-05-27 120 views
6

我在水平方向上有一個LinearLayout中的多個按鈕。在較大的設備上,所有按鈕文本都以20sp文本大小放在一行上。但是,在20sp文本大小的較小設備上,按鈕的文本會變成兩行。最大化Android按鈕文本的大小

如何告訴它使文本的大小盡可能大,以便文本保持在一行上?

+0

您是否嘗試將最大線條屬性設置爲1? – Sam 2011-05-27 19:47:30

+0

是的,但那不起作用,因爲它只是將第二行中的字母剔除。我需要在沒有足夠空間的情況下調整文本大小,而不是將文本截斷。 – 2011-05-27 19:56:00

+0

啊我看,這聽起來屬性'singleLine'會更多你要找的東西。 – Sam 2011-05-27 20:01:09

回答

0

你可以得到屏幕分辨率,並在代碼中,你可以通過改變LinearLayout.LayoutParams

EDIT適應你的按鈕的文字大小:算法

首先:獲得屏幕分辨率,看看如果你的手機是小,meduim或大(要做到這一點,使用類:DisplayMetrics)。

:在你R代碼裏面,你會測試每一個類型的大小(一般我想3:小,meduim,大),並修改TEXTSIZE您的按鈕是這樣的:

btn.setTextSize(float size) ; 
+1

如何根據屏幕寬度調整文字大小?算法是什麼? – 2011-05-27 19:57:58

+0

嗨,我將解釋算法,請參閱我的編輯:) – Houcine 2011-05-27 20:01:23

+1

這將無法正常工作,因爲我已經使用「sp」大小說明了不同的密度。 – 2011-05-27 20:24:57

1

這對我的作品......你需要自定義您的需求:

// Determine Scaled Density for later calculations 
Display dd = ((Activity) m_Context).getWindowManager().getDefaultDisplay(); 
DisplayMetrics dm = new DisplayMetrics(); 
dd.getMetrics(dm); 
float m_ScaledDensity = dm.scaledDensity; 

Rect bounds = new Rect(); 
Paint p = new Paint(); 
p.setTypeface(btn.getTypeface()); 

// W is a very wide character 
String sample = "NeedsToFIt" 
int maxFont; 
for (maxFont= 1 
    ; -bounds.top <= btn.getHeight() && bounds.right <= btn.getWidth() 
    ; maxFont++) { 
    p.setTextSize(maxFont); 
    p.getTextBounds(sample, 0, sample.length(), bounds); 
} 
maxFont = (int) ((maxFont - 1)/m_ScaledDensity); 
btn.setTextSize(maxFont); 
+0

如果樣本是空字符串,則不起作用。 – Vanuan 2012-06-09 18:12:22

+0

此外,這不考慮按鈕填充。 – Vanuan 2012-06-09 18:32:48

相關問題