我正在自定义视图的构造函数中调用以下内容:
private void style(Resources.Theme theme, AttributeSet attrs) {
TypedArray a = theme.obtainStyledAttributes(
attrs,
R.styleable.StackedTextView,
0, 0);
try {
DebugTool.assertTrue(holdr != null, "View holder has not been properly intialized.");
String line1 = a.getString(R.styleable.StackedTextView_line1);
setLine1(line1);
String line2 = a.getString(R.styleable.StackedTextView_line2);
setLine2(line2);
line1Size = a.getDimension(R.styleable.StackedTextView_line1_textSize, 20);
line2Size = a.getDimension(R.styleable.StackedTextView_line2_textSize, 20);
if (line1Size > 0) {
holdr.textLine1.setTextSize(line1Size);
}
if (line2Size > 0) {
holdr.textLine2.setTextSize(line2Size);
}
} finally {
a.recycle();
}
}
这段代码旨在设置2个文本字段的文本内容和文本大小。
除了文本内容的字符串格式(已正常工作),我在attr.xml中还有以下代码:
<attr name="line1_textSize" format="dimension" />
<attr name="line2_textSize" format="dimension" />
当我使用这个视图并通过 XML 使用尺寸维度设置文本大小时,
<com.me.app.view.component.StackedTextView
android:id="@+id/overview_total_reviews"
app:line1="40"
app:line2="Rating"
style="@style/OverviewStackedText"
app:line1_textSize="10sp"
app:line2_textSize="12sp"
/>
文本最终比预期的要大得多。我只设置了10和12sp,但文本大小更接近于30sp。
有人能看出我做错了什么吗?我需要在DisplayMetrics中做些什么,以确保正确缩放吗?
编辑:添加一些说明
尺寸确实被获取到了。当我使用自定义属性(在xml中)设置不同的文本大小时,文本确实会发生变化。我还尝试使用getDimensionPixelSize
。
就好像计算/尺寸检索错误一样。1sp(或dp)的变化会导致显著的变化。
setTextSize()
使用了COMPLEX_UNIT_SP
,导致了这个错误。 - Weekend