TextSize更改后TextView对齐中断

时间:2015-01-27 11:48:40

标签: java android android-studio

关于类似问题的问题很多,我无法找到任何有助于我修复具体内容的问题。 我在FrameLayout中有一个TextView,因为没有自动缩放,我使用Paint和getTextBounds计算文本大小。大小似乎没问题,但是在更改TextSize后对齐会被破坏 - 文本从顶部获得一个奇怪的边距。

  1. 是的,我确实只在绘制布局后才使用ViewTreeObserver来应用更改。
  2. 将重力设置为顶部和左侧仍会使文本向下移动一点。
  3. 这里是布局的代码,没什么特别的:

    <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。

    Structure

    这是结果的快照(抱歉质量不好):

    enter image description here

0 个答案:

没有答案