我在水平方向上有一個LinearLayout中的多個按鈕。在較大的設備上,所有按鈕文本都以20sp文本大小放在一行上。但是,在20sp文本大小的較小設備上,按鈕的文本會變成兩行。最大化Android按鈕文本的大小
如何告訴它使文本的大小盡可能大,以便文本保持在一行上?
我在水平方向上有一個LinearLayout中的多個按鈕。在較大的設備上,所有按鈕文本都以20sp文本大小放在一行上。但是,在20sp文本大小的較小設備上,按鈕的文本會變成兩行。最大化Android按鈕文本的大小
如何告訴它使文本的大小盡可能大,以便文本保持在一行上?
你可以得到屏幕分辨率,並在代碼中,你可以通過改變LinearLayout.LayoutParams
EDIT適應你的按鈕的文字大小:算法
首先:獲得屏幕分辨率,看看如果你的手機是小,meduim或大(要做到這一點,使用類:DisplayMetrics
)。
二:在你R代碼裏面,你會測試每一個類型的大小(一般我想3:小,meduim,大),並修改TEXTSIZE您的按鈕是這樣的:
btn.setTextSize(float size) ;
如何根據屏幕寬度調整文字大小?算法是什麼? – 2011-05-27 19:57:58
嗨,我將解釋算法,請參閱我的編輯:) – Houcine 2011-05-27 20:01:23
這將無法正常工作,因爲我已經使用「sp」大小說明了不同的密度。 – 2011-05-27 20:24:57
這對我的作品......你需要自定義您的需求:
// 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);
爲我工作的唯一解決方案:Resize Text to Fit the View in Android [source code]
總之,覆蓋onDraw
方法來滿足您的需求。
您是否嘗試將最大線條屬性設置爲1? – Sam 2011-05-27 19:47:30
是的,但那不起作用,因爲它只是將第二行中的字母剔除。我需要在沒有足夠空間的情況下調整文本大小,而不是將文本截斷。 – 2011-05-27 19:56:00
啊我看,這聽起來屬性'singleLine'會更多你要找的東西。 – Sam 2011-05-27 20:01:09