我想计算行(或布局)高度(在DP中),当使用默认行间距时,它只包含TextView
作为TextView text size
的结果?
I.E.对于这种布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/minRow1col1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textIsSelectable="false"
android:textSize="11dp" />
</LinearLayout>
布局/线高是多少? (任何公式?我不需要运行时的值)
谢谢!
答案 0 :(得分:9)
I don't know if this help you guys, but my solution to get the height of a line it's independent of the height of the layout, just take the font metrics like this:
myTextView.getPaint().getFontMetrics().bottom - myTextView.getPaint().getFontMetrics().top)
With this you will get the line height and for me, it's works with all words ( there are some chars like "g" or "j" that take some bottom space, the so called "descender" and so on ).
答案 1 :(得分:3)
尝试使用TextPaint
的{{1}}对象。
TextView
TextView tv = useTextView;
String text = tv.getText().toString();
Paint textPaint = tv.getPaint();
Rect textRect = new Rect();
textPaint.getTextBounds(text, 0, text.length(), textRext);
int textHeight = textRect.height();
的每个文档:
返回边界(由调用者分配)最小的矩形 包含所有字符,隐含的原点为(0,0)。
使用Paint#getTextBound
使用的Paint
对象将确保它具有与用于绘制文本相同的参数集。
答案 2 :(得分:0)
您可以尝试Paint.getTextBounds():
String finalVal ="Hello";
Paint paint = new Paint();
paint.setTextSize(18);
paint.setTypeface(Typeface.SANS_SERIF);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL);
Rect result = new Rect();
// Measure the text rectangle to get the height
paint.getTextBounds(finalVal, 0, finalVal.length(), result);
Log.d("WIDTH :", String.valueOf(result.width()));
Log.d("HEIGHT :", String.valueOf(result.height()));
答案 3 :(得分:0)
对于我的用例,我首先假设行高是一个取决于文本大小的线性函数,如:
line_height = text_size*some_constant
现在some_constant可能也是一个函数,这取决于你使用的字体。但由于在我的要求中字体是静态的,我能够计算some_constant并以安全的方式重复使用。
为了让您了解我的用例,我正在缩放一段多行文字,以便将其放入一个可变高度的框中。
在我的用例中,我想更进一步,包括空间倍增器。这很简单,因为它只是等式中的另一个因素:
line_height = text_size*some_constant*spacing_multiplier
总而言之,如果您坚持使用相同的字体并且计算some_constant的值一次,您可以(可能)获得您的功能。
免责声明:我说“可能”很多,因为我没有测试过很多我的假设,但就像我说的那样,它适用于一个相当复杂的用例。
答案 4 :(得分:-1)
您必须创建自定义Textview
并使用getActualHeight()
方法。 公式的位置为:actualHeight=(int) ((getLineCount()-1)*getTextSize());
public class TextViewHeightPlus extends TextView {
private static final String TAG = "TextView";
private int actualHeight=0;
public int getActualHeight() {
return actualHeight;
}
public TextViewHeightPlus(Context context) {
super(context);
}
public TextViewHeightPlus(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public TextViewHeightPlus(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
actualHeight=0;
actualHeight=(int) ((getLineCount()-1)*getTextSize());
}
}