根据设备尺寸增大字体大小

问题描述 投票:0回答:8

我计划在不同的设备尺寸上为文本视图使用不同的字体大小,以使字母清晰易读。我已经决定不对不同的设备使用不同的布局,并构建一个通用的布局来适应所有设备。现在唯一的问题是文本大小。

问题:

  1. 我想获得您关于如何根据设备尺寸(物理尺寸)更改字体大小的技术建议。

  2. 如何根据宽高比得出字体大小。

  3. 使用这种方法有什么缺陷吗?

文本视图的 Xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tvValue4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="I planned to use different font size for the textview on different device size so as to make the letters legible. I have already decided not to use different layouts for different devices and built a common layout to fit in all the devices. Now the only problem is on the text size."
        android:textColor="#000000"
        android:textSize="15sp" />

</LinearLayout>

提前致谢

android textview
8个回答
28
投票

是的,这种方法是有缺陷的。 Android 设备有不同的尺寸,但它们也可以有非常不同的密度。

enter image description here

您应该遵循 Android 设计最佳实践

enter image description here

他们实际上是经过深思熟虑的。为什么要重新发明轮子?


23
投票

尝试一下,在您的 xml 中添加此属性。它会根据屏幕尺寸调整文本大小,试试吧。

 style="@android:style/TextAppearance.DeviceDefault.Medium"

5
投票

对于字体大小,请使用比例像素 (sp)。 Android 会根据设备密度相应缩放字体大小。上面的帖子有更好的解释和推理。


2
投票
    String s= "hello";
    TextView tv= (TextView) findViewById(R.id.tv);
    Spannable span = new SpannableString(s);
    span.setSpan(new RelativeSizeSpan(5f), 0, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    tv.setText(span);

根据屏幕尺寸将 5f 更改为您想要的任何尺寸。

http://developer.android.com/guide/practices/screens_support.html。检查标题最佳实践下的主题。


1
投票

适用于 API 26 及更高版本

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform" />

来源:https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview


0
投票

Android 为此内置了工具 - dp 和 sp。 dp 是设备像素。它基本上是 1dp=1/160 英寸。这允许您指定实际大小的字体高度。 Sp 是缩放像素。此大小根据默认字体大小进行缩放,因此用户可以放大其系统字体,并且您的应用程序将匹配它。对于有视力问题、需要大文本的人来说很方便,同时又不占用其他人的屏幕空间。

您可能应该使用其中之一。


0
投票

对于这个问题,我在很多项目中使用以下库,并相信这非常棒。无需担心屏幕。但同样,您需要为选项卡创建单独的布局。

https://github.com/intuit/sdp


0
投票

甜蜜又简单,如下...

public static void applyFont(TextView tv, Float fontSize) {
    tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * fontFactor);
}

public static float fetchFontFactor(Activity act) {

    DisplayMetrics displayMetrics = new DisplayMetrics();

    act.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

    float returnNumber = ((float) displayMetrics.widthPixels ) / 1280.0f;

    return returnNumber;
}

在 MainActiviy.java 中我有

fontFactor = fetchFontFactor(this);

现在的问题是,我的代码中的 1280 是什么。

答案是,这只不过是设计师提供的设计的宽度。前任。如果设计师给出尺寸为1080x1920的设计,您可以用1080替换1280。

所以如果设计师在设计时有55的字体,我们可以使用55,如下所示。

applyFont(titleTV, 55f);
© www.soinside.com 2019 - 2024. All rights reserved.