背景
我需要在textView中使用SpannableString显示金额,然后将TextView的字体与给定的边界相符合,如下所示:
SpannableString代码:
String s= "2,000,000.000";
SpannableString ss1= new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(1.4f), 0,1, 0); // set size 2
ss1.setSpan(new RelativeSizeSpan(1.2f), 2,5, 0); // set size 000 (first)
ss1.setSpan(new RelativeSizeSpan(1.2f), 6,9, 0); // set size 000 (second)
ss1.setSpan(new RelativeSizeSpan(1f), 10,13, 0); // set size 000 (Third)
TextView tv= (TextView)findViewById(R.id.money);
tv.setText(ss1);
问题
我的问题是将文字大小与屏幕宽度相匹配
我尝试使用这些帖子的解决方案(here和here),但没有一个与SpannableString不兼容。
问题
有人知道这个问题的解决方案吗?
答案 0 :(得分:0)
چطوریپسر? 您可以同时获得屏幕的宽度和高度,并随处使用:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final int DisplayHeight = displayMetrics.heightPixels;
final int DisplayWidth = displayMetrics.widthPixels;
在你的情况下,你想设置tv
的宽度,如下面所示:
tv.getLayoutParams().width = DisplayWidth;
此测量非常强大,随处可用。高度考虑的唯一问题,如果你在FULL_SCREEN上有你的活动标志你实际上需要考虑导航栏高度以及大多数智能手机48dp
这意味着您可以使用DisplayHeight+ContextCompat.getDimen(mContext,R.dimen.dimen48);
并将dimen.xml中的dimen48定义为48dp
答案 1 :(得分:0)
首先,这是如何设置Textview的宽度和高度:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) tv.getLayoutParams();
params.width = getResources().getDimensionPixelSize(R.dimen.any_width_you_want);
params.height = getResources().getDimensionPixelSize(R.dimen.any_height_you_want);
tv.setLayoutParams(params);
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) tv.getLayoutParams();
params.width = getResources().getDimensionPixelSize(R.dimen.any_width_you_want);
params.height = getResources().getDimensionPixelSize(R.dimen.any_height_you_want);
tv.setLayoutParams(params);
tv
TextView具有您在xml源中定义的文本大小吗?假设您的TextView字体大小为14sp。Tha表示您的TextView高度为14 + 6 - > 20dp
因此,请参阅tv
Textview
基于ss1.setSpan(new RelativeSizeSpan(1.4f), 0,1, 0);
最高比例为1.4f
这意味着tv
的最高高度是(20dp)* 1.4
所需的最终高度是<<<<<<<<>>>>
dimens.xml
中定义此28dp,如下所示:
<< ? xml version = "1.0"encoding = "utf-8" ? >
<resources >
...
<dimen name ="dimen28">28dp< /dimen>
...
</resources>
params.height = getResources().getDimensionPixelSize(R.dimen.dimen28);
tv.setLayoutParams(params);
یادتنرهمنفرضکردمسایزفونتشما14هستش。 اینکارروباسایزفونتخودتانجامبده
答案 2 :(得分:0)
随着扩大,我使用了小型化
像这样:ss1.setSpan(new RelativeSizeSpan(1.2f), 0, 1, 0);
ss1.setSpan(new RelativeSizeSpan( 1f ), 2, 5, 0);
ss1.setSpan(new RelativeSizeSpan( 1f ), 6, 9, 0);
ss1.setSpan(new RelativeSizeSpan(0.8f), 10, 13, 0);