TextView.setTextSize行为异常 - 如何为不同的屏幕动态设置textview的文本大小

sin*_*spk 115 android textview

通话TextView.setTextSize()工作异常.在调用之后,setTextSize如果我们得到一个getTextSize更高的值,那就是我们之前设置它的值.

这是我们正在做的事情:

zoomControl.setOnZoomInClickListener(new OnClickListener() {
    public void onClick(View view) {
        float size = mViewShabad.getTextSize() + 1;
        textView.setTextSize(size);
    }
});
Run Code Online (Sandbox Code Playgroud)

谁看过这个吗?

kco*_*ock 348

这里的区别在于,在该setTextSize(int size)方法中,默认的单位类型是"sp"或"缩放像素".对于每个屏幕密度(ldpi,mdpi,hdpi),此值将是不同的像素尺寸.

getTextSize()另一方面,返回文本的实际像素尺寸.

您可以使用setTextSize(int unit, float size)指定单位类型.可以在TypedValue类中找到此常量值,但其中一些是:

TypedValue.COMPLEX_UNIT_PX   //Pixels

TypedValue.COMPLEX_UNIT_SP   //Scaled Pixels

TypedValue.COMPLEX_UNIT_DIP  //Device Independent Pixels
Run Code Online (Sandbox Code Playgroud)

  • 另外需要注意的是,它只是在API级别7开始执行此操作.另一个"陷阱"在一个荒谬的API中. (4认同)
  • 注意参数顺序很重要 - 我不小心有了setTextSize(size,TypedValue.COMPLEX_UNIT_SP),因为那是我错误推测的顺序! (3认同)

小智 17

这个问题发生的原因是该getTextSize()方法以像素为单位返回大小取决于屏幕密度!获取Actual TextSize使用此:

DisplayMetrics metrics;
metrics = getApplicationContext().getResources().getDisplayMetrics();
float Textsize =myTextView.getTextSize()/metrics.density;
myTextView.setTextSize(Textsize+1);
Run Code Online (Sandbox Code Playgroud)

我希望它解决它:)

  • 我通过使用带有`setTextSize(int unit,float size)`的显示度量来解决我的问题. (2认同)

小智 7

如果设置更改字体大小,导致显示错误,您可以这样做:

setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15.f);
Run Code Online (Sandbox Code Playgroud)

  • 谁在`DIP`中设置了textSize? (3认同)

小智 6

当我们尝试以编程方式 setText() 时, getTextSize() 出现问题,返回以 px 为单位的值而不是 sp/dp/dip ,并且我们知道 1sp/dp=1.5px(屏幕尺寸 =240)。

 titleBar.setTextSize(TypedValue.COMPLEX_UNIT_SP, (getResources().getDimension(R.dimen.text_size)*1.5f)); 
Run Code Online (Sandbox Code Playgroud)

对我来说效果很好,或者我们可以使用 displaymatrix 来表示 px:sp/dp 比率,然后用 1.5f 替换该值

means-> titleBar.setTextSize(TypedValue.COMPLEX_UNIT_SP, (getResources().getDimension(R.dimen.text_size)*your_sp_and_px_ratio_in_int f));
Run Code Online (Sandbox Code Playgroud)


Nag*_*ddy 5

经过很长时间的打击,终于像这样解决了

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
          getResources().getDimension(R.dimen.textsize));
Run Code Online (Sandbox Code Playgroud)

创建像这样的尺寸文件夹 res/values/dimensions.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

 <dimen name="textsize">8sp</dimen>

 </resources>
Run Code Online (Sandbox Code Playgroud)