文本视图返回错误的文本大小

Text view returning wrong text size

我需要获取文本视图的文本大小,以便在用户按下按钮时增加文本大小,这表明它有助于增加文本视图中的文本大小。让我清楚我到目前为止所做的事情

我有一个文本视图并通过 dimen 文件夹设置其文本大小

 <TextView
            android:id="@+id/tv_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="2dp"
            android:text="@string/flash"
            android:textSize="@dimen/tv_text_fontsize"
            android:gravity="fill_horizontal"
            />

为了支持所有屏幕尺寸的文本视图文本大小,我制作了不同的 dimen 文件夹并设置文本大小如下

<dimen name="tv_text_fontsize">32sp</dimen>

因此对于平板电脑等大型设备来说是 32sp。

但是当我通过 java 获取文本视图的大小时,它 returns 我错误的文本大小。看下面 Ho 我正在获取文字大小

float textSize = tvContentString.getTextSize();

但这返回给我错误的文本视图文本大小。

请给我建议,我怎样才能获得在文本视图中显示的确切文本大小。因为我想在按下按钮时增加文本大小所以为此我需要检索文本的实际大小即如果文本大小是 32 我想增加它 32+1 = 3sp

但是当我检索文本大小时,它是其他东西,例如对于平板电脑,我将其设置为 32sp,但它正在检索我的 42,因此在 42+1 中增加使其成为 43,当我将其设置为按下按钮时它看起来很尴尬。

求助!!!我怎样才能得到真正的文字大小。 ??

问题是 getTextSize() return 大小以像素为单位,而不是以 sp 为单位。所以你可以先将像素转换为 sp -

tvContentString.setTextSize(TypedValue.COMPLEX_UNIT_SP, new_size);

要从像素转换为 sp,请使用此 -

public static float pixelsToSp(Context context, float px) {
    float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
    return px/scaledDensity;
}

代码取自 here