Android 如何使文本视图中的字体相对于其大小变大或变小
如何使Android 如何使文本视图中的字体相对于其大小变大或变小,android,textview,Android,Textview,如何使TextView中的字体大小相对于当前字体大小稍大或稍小 我看到许多人使用硬编码的字体大小值,如15sp,但我希望避免这种情况,因为我希望独立于当前的字体大小。相反,我想将字体大小乘以1.2使其变大,乘以0.8使其变小,例如: // make font larger float size = textView.getTextSize()*1.2; textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); TextView tv = n
TextView
中的字体大小相对于当前字体大小稍大或稍小
我看到许多人使用硬编码的字体大小值,如15sp
,但我希望避免这种情况,因为我希望独立于当前的字体大小。相反,我想将字体大小乘以1.2使其变大,乘以0.8使其变小,例如:
// make font larger
float size = textView.getTextSize()*1.2;
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
TextView tv = new TextView(context);
不过,我想知道这是否是最好的方式,因为它看起来有点尴尬。这就是为什么我想问,如果没有像15sp
这样的硬编码值,是否有更方便的方法使默认的TextView
变大或变小一点
编辑
我应该补充一点,我正在以编程方式创建所有内容。我没有使用XML。因此,TextView
是这样创建的:
// make font larger
float size = textView.getTextSize()*1.2;
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
TextView tv = new TextView(context);
通过这样做,
tv
将使用Android的默认字体设置。现在,我想用Java编程将tv
中的字体变大或变小。sp
值用于文本。SP代表“可缩放像素”。使用sp
的好处是它可以根据用户的偏好进行缩放
我建议不要手动进行任何计算。textView.getTextSize()
将返回的值本质上是“密度无关像素”(对于textSize,它将是sp
)。这个价值很可能来自你的主题
使用与密度无关的像素是正确的方法(或者自动调整大小,仍然使用dp
或sp
)。您试图实现的将是混乱的,您将不知道它将如何在运行时扩展。使用“硬编码”值,例如15sp
,它不会停止根据字体大小缩放文本,相反,它会相应地计算。举个例子,15sp
将这样翻译:
对于100%字体大小:
- ldpi11.25px
- mdpi15.00px
- hdpi22.50px
- xhdpi30.00px
- xxhdpi45.00px
- ldpi8.44px
- mdpi11.25px
- hdpi16.88px
- xhdpi22.50px
- xxhdpi33.75px
致:
以编程方式:
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
文本视图,
16,//分钟
24,//最大值
1,//粒度步骤
TypedValue.COMPLEX\u UNIT\u SP
)
上述情况意味着:
- 最小文本大小为16sp
- 最大文本大小为24sp
- 如果文本大小不是最大值或最小值,则它将按
的比例放大或缩小。因此,所有可用值将是1sp
16、17、18、19、20、21、22、23、24
包装内容,因为这可能会导致问题。我建议使用硬编码的值,或者如果使用ConstraintLayout以百分比或限制视图大小的实际约束来约束它
阅读更多:
重写(基本)活动的attachBaseContext()
,并将其设置为fontScale
override fun attachBaseContext(newBase: Context?) {
val config = Configuration()
config.setToDefaults();
config.fontScale = Random.nextFloat()*2; // Here Goes scale value for
val context = newBase?.createConfigurationContext(config);
super.attachBaseContext(context);
}
在我每次随机缩放的例子中,您可以将所需的缩放值保存在某个地方并在此处设置
btnChangeSize.setOnClickListener {
recreate()
}
将进行此函数调用,所有文本将按您的需要缩放对不起,我没有使用XML,但所有内容都是通过编程方式创建的。请参阅我的编辑。@Andreas我用Kotlin的例子编辑了我的答案。谢谢,但这也使用了硬编码值,如16和24。我希望完全避免硬编码的值,并拥有与默认字体大小相关的所有内容。添加了解释为什么我认为这是个坏主意。这不会缩放我所有视图的字体吗?我只想缩放单个视图的字体大小。是的,它将在所有视图上更改。