最大化Android按钮文本的大小

最大化Android按钮文本的大小,android,button,Android,Button,我有多个按钮在一条直线上水平排列。在较大的设备上,所有按钮文本都以20sp文本大小放在一行上。然而,在一个文本大小为20sp的较小设备上,按钮的文本会变为两行 我如何告诉它使文本大小尽可能大,以便文本保持在一行上?您可以获得屏幕分辨率,并且在代码中,您可以通过更改LinearLayout.LayoutParams来调整按钮文本的大小 编辑:算法 首先:获取屏幕分辨率,以查看您的手机是小型、中型还是大型。(为此,请使用类:DisplayMetrics) Second:在代码中,您将测试每种类型的大

我有多个按钮在一条直线上水平排列。在较大的设备上,所有按钮文本都以20sp文本大小放在一行上。然而,在一个文本大小为20sp的较小设备上,按钮的文本会变为两行


我如何告诉它使文本大小尽可能大,以便文本保持在一行上?

您可以获得屏幕分辨率,并且在代码中,您可以通过更改
LinearLayout.LayoutParams来调整按钮文本的大小

编辑:算法

首先:获取屏幕分辨率,以查看您的手机是小型、中型还是大型。(为此,请使用类:
DisplayMetrics

Second:在代码中,您将测试每种类型的大小(通常我认为是3:小、中、大),并修改按钮的文本大小,如下所示:

btn.setTextSize(float size ) ; 

这对我有用。。。您需要根据自己的需要进行定制:

// 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);
//为以后的计算确定缩放密度
显示dd=((活动)m_上下文).getWindowManager().getDefaultDisplay();
DisplayMetrics dm=新的DisplayMetrics();
dd.getMetrics(dm);
浮动m_标度密度=dm.scaled密度;
Rect bounds=new Rect();
油漆p=新油漆();
p、 setTypeface(btn.getTypeface());
//W是一个很宽的字符
字符串sample=“NeedsToFIt”
int-maxFont;
对于(maxFont=1)

;-bounds.top唯一对我有效的解决方案:


简而言之,覆盖
onDraw
方法以满足您的需要。

我如何根据屏幕宽度调整文本大小?算法是什么?这不起作用,因为我已经使用“sp”计算了不同的密度大小。您是否尝试将“最大行数”属性设置为1?是的,但这不起作用,因为它只是将第二行上的字母拖走。我需要在没有足够空间时调整文本大小,而不是截断文本。啊,我明白了,听起来属性
singleLine
更符合您的要求。不,现在它将“…”放在末尾,而不是调整文本的大小。此外,这也没有考虑按钮填充。