背景
我需要在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。
问题
有人知道这个问题的解决办法吗?
发布于 2018-02-08 12:17:54
好吧,我自己解决了这个问题
随着的扩大,我使用了小型化的
就像这样:
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);发布于 2018-02-02 17:47:43
چطوریپسر؟您可以获得屏幕的宽度和高度,并在任何地方使用它:
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上有活动旗,实际上您需要考虑导航栏的高度,这在大多数智能手机中是48 to。
这意味着您可以使用DisplayHeight+ContextCompat.getDimen(mContext,R.dimen.dimen48);
并在dimen48中将dimen.xml定义为48 as。
发布于 2018-02-02 18:49:58
首先,您可以为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字体大小为14 is。表示您的TextView高度为14+6 ->20 is。
那么,看看您的tv Textview的字体大小是多少
基于ss1.setSpan(new RelativeSizeSpan(1.4f), 0,1, 0);的最高标度是1.4f
这意味着tv的最高高度是(20 is )*1.4。
所以你想要的最后一个高度是<<<28dp>>>
dimens.xml中定义这个28 in,如下所示:
<< ? 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هستش.اینکارروباسایزفونتخودتانجامبده
https://stackoverflow.com/questions/48587633
复制相似问题