Android Snackbar文本化太大了

时间:2016-02-17 02:34:28

标签: android android-snackbar

我正在尝试更改Snackbar文本大小,因为我希望它对于视力不佳的用户来说易于阅读。我写这个方法来创建Snackbar

private Snackbar getSnackbar(int msgId) {
    final Snackbar snackbar = Snackbar.make(
            mView,
            msgId,
            Snackbar.LENGTH_LONG);
    final View view = snackbar.getView();
    final TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);
    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.snackbar_textsize));
    return snackbar;
}

相应的dimens.xml是:

<resources>
    <dimen name="header_date_font_size">16sp</dimen>
    <dimen name="snackbar_textsize">16sp</dimen>
</resources>

以下是生成的Snackbar的屏幕截图。

enter image description here

为什么文字太大了?我期待它通常是16sp大小,因为它在我的应用程序中无处不在。

1 个答案:

答案 0 :(得分:6)

getDimension()返回已应用其维度缩放系数的资源的值。

因此,如果在sp中指定了资源,则返回值是实际像素的大小。

但是你将这个值反馈到setText()并说测量值在sp,当它实际上是像素时。因此,它应用另一个缩放因子。

相反,只需说:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.snackbar_textsize));