我计划在不同的设备尺寸上为文本视图使用不同的字体大小,以使字母清晰易读。我已经决定不对不同的设备使用不同的布局,并构建一个通用的布局来适应所有设备。现在唯一的问题是文本大小。
问题:
我想获得您关于如何根据设备尺寸(物理尺寸)更改字体大小的技术建议。
如何根据宽高比得出字体大小。
使用这种方法有什么缺陷吗?
文本视图的 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>
提前致谢
尝试一下,在您的 xml 中添加此属性。它会根据屏幕尺寸调整文本大小,试试吧。
style="@android:style/TextAppearance.DeviceDefault.Medium"
对于字体大小,请使用比例像素 (sp)。 Android 会根据设备密度相应缩放字体大小。上面的帖子有更好的解释和推理。
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。检查标题最佳实践下的主题。
适用于 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
Android 为此内置了工具 - dp 和 sp。 dp 是设备像素。它基本上是 1dp=1/160 英寸。这允许您指定实际大小的字体高度。 Sp 是缩放像素。此大小根据默认字体大小进行缩放,因此用户可以放大其系统字体,并且您的应用程序将匹配它。对于有视力问题、需要大文本的人来说很方便,同时又不占用其他人的屏幕空间。
您可能应该使用其中之一。
对于这个问题,我在很多项目中使用以下库,并相信这非常棒。无需担心屏幕。但同样,您需要为选项卡创建单独的布局。
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);