关于类似问题的问题很多,我无法找到任何有助于我修复具体内容的问题。 我在FrameLayout中有一个TextView,因为没有自动缩放,我使用Paint和getTextBounds计算文本大小。大小似乎没问题,但是在更改TextSize后对齐会被破坏 - 文本从顶部获得一个奇怪的边距。
这里是布局的代码,没什么特别的:
<FrameLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:id="@+id/labelCreditsFrame"
android:baselineAligned="false"
android:layout_weight="3">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1000"
android:id="@+id/labelCredits"
android:typeface="sans"
android:singleLine="true"
android:phoneNumber="false"
android:autoText="false"
android:textColor="#ff000000"
android:ellipsize="start" />
</FrameLayout>
这里是在布局加载后运行的代码 - 看似正确的文本大小,以便填充其父布局。它只是绘制文本,测量它,然后检查它是否仍然适合FrameLayout。
FrameLayout frame = (FrameLayout) findViewById(R.id.labelCreditsFrame);
TextView text = (TextView)findViewById(R.id.labelCredits);
Paint textPaint = new Paint();
Rect result = new Rect();
final float density = getApplicationContext().getResources().getDisplayMetrics().density;
textPaint.set(text.getPaint());
float testSize = 5;
boolean test = true;
while(test){
textPaint.setTextSize(testSize+2);
textPaint.getTextBounds(text.getText().toString(), 0, text.getText().toString().length(), result);
test = (result.width()*density<frame.getMeasuredWidth() && result.height()*density<frame.getMeasuredHeight());
if(test) testSize += 2;
}
text.setTextSize(testSize);
如上所述,生成的文本向下移动,甚至部分在FrameLayout之外,因此它的一部分被切断。我无法弄清问题在哪里或者我还能尝试什么,因为Android开发有时候真的不清楚。
任何帮助或提示都会非常感激!谢谢你的时间。
编辑:这是整个活动的结构。其他所有东西都只是普通的框架,它们的重量并没有运行其他代码。突出显示的FrameLayout是包含TextView的布局,以及用于确定测试文本大小是否仍然适合的布局。 TextView本身的宽度和高度都设置为wrap_content。
这是结果的快照(抱歉质量不好):