我计划在不同的设备尺寸上为textview使用不同的字体大小,以使字母清晰可辨。我已经决定不为不同的设备使用不同的布局,并构建了一个适合所有设备的通用布局。现在唯一的问题是文本大小。
问题:
我想就如何根据设备的大小(物理尺寸)改变字体大小提出技术建议。
如何根据宽高比推导字体大小。
使用这种方法有什么缺陷吗?
文本视图的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>
提前致谢
答案 0 :(得分:27)
是的,这种方法存在缺陷。 Android设备具有不同的大小,但它们也可以具有非常不同的密度。
您应该关注Android设计best practices。
他们实际上已经深思熟虑了。你为什么要重新发明轮子?
答案 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)
对于这个问题,我在很多项目中使用了以下库,并且相信这很棒。无需担心屏幕。但是,您还需要为标签创建单独的布局。
答案 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