根据设备的大小增加字体大小

时间:2013-03-30 05:28:12

标签: android textview

我计划在不同的设备尺寸上为textview使用不同的字体大小,以使字母清晰可辨。我已经决定不为不同的设备使用不同的布局,并构建了一个适合所有设备的通用布局。现在唯一的问题是文本大小。

问题:

  1. 我想就如何根据设备的大小(物理尺寸)改变字体大小提出技术建议。

  2. 如何根据宽高比推导字体大小。

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

  4. 文本视图的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>
    

    提前致谢

7 个答案:

答案 0 :(得分:27)

是的,这种方法存在缺陷。 Android设备具有不同的大小,但它们也可以具有非常不同的密度。

enter image description here

您应该关注Android设计best practices

enter image description here

他们实际上已经深思熟虑了。你为什么要重新发明轮子?

答案 1 :(得分:18)

试试这个,在xml中添加此属性。它将根据屏幕尺寸调整文本大小。

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

答案 2 :(得分:6)

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

答案 3 :(得分: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。请查看标题最佳做法

下的主题

答案 4 :(得分:0)

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

你可能应该使用其中一种。

答案 5 :(得分:0)

对于这个问题,我在很多项目中使用了以下库,并且相信这很棒。无需担心屏幕。但是,您还需要为标签创建单独的布局。

https://github.com/intuit/sdp

答案 6 :(得分:0)

对于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