首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动适配TextView和spannableString

自动适配TextView和spannableString
EN

Stack Overflow用户
提问于 2018-02-02 17:08:57
回答 3查看 764关注 0票数 0

背景

我需要在textView中用SpannableString显示金额,然后将TextView字体与给它的边界相匹配,如下所示:

SpannableString代码:

代码语言:javascript
复制
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);

问题

我的问题是将文本大小与屏幕宽度相匹配。

我试图为这些帖子(herehere)使用这些解决方案,但是没有一个不适合SpannableString。

问题

有人知道这个问题的解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-08 12:17:54

好吧,我自己解决了这个问题

随着的扩大,我使用了小型化的

就像这样:

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2018-02-02 17:47:43

چطوریپسر؟您可以获得屏幕的宽度和高度,并在任何地方使用它:

代码语言:javascript
复制
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final int DisplayHeight = displayMetrics.heightPixels;
final int DisplayWidth = displayMetrics.widthPixels;

在您的示例中,您希望设置tv的宽度,如下所示:

代码语言:javascript
复制
tv.getLayoutParams().width = DisplayWidth;

这是非常强大的测量,随时可以使用它在任何地方。唯一需要考虑的是高度,如果您在FULL_SCREEN上有活动旗,实际上您需要考虑导航栏的高度,这在大多数智能手机中是48 to。

这意味着您可以使用DisplayHeight+ContextCompat.getDimen(mContext,R.dimen.dimen48);

并在dimen48中将dimen.xml定义为48 as。

票数 0
EN

Stack Overflow用户

发布于 2018-02-02 18:49:58

首先,您可以为Textview设置宽度和高度:

  1. 如果您的TextView位于RelativeLayour中:

代码语言:javascript
复制
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);

  1. 如果您的TextView在其他任何内容中:

代码语言:javascript
复制
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);

  1. 现在,您的tv TextView有一个在xml源代码中定义的文本大小,对吗?假设您的TextView字体大小为14 is。

表示您的TextView高度为14+6 ->20 is。

那么,看看您的tv Textview的字体大小是多少

  1. 我假设您的文本视图大小为14 is。现在,您需要计算您创建的SpannableString中的最高标度。

基于ss1.setSpan(new RelativeSizeSpan(1.4f), 0,1, 0);的最高标度是1.4f

这意味着tv的最高高度是(20 is )*1.4。

所以你想要的最后一个高度是<<<28dp>>>

  1. dimens.xml中定义这个28 in,如下所示:

代码语言:javascript
复制
<< ? xml version = "1.0"encoding = "utf-8" ? >
  <resources >
  ...
 
  <dimen name ="dimen28">28dp< /dimen>  
 
  ... 
  
 
  </resources>

  1. 现在你做完这件事

代码语言:javascript
复制
params.height = getResources().getDimensionPixelSize(R.dimen.dimen28);
tv.setLayoutParams(params);

یادتنرهمنفرضکردمسایزفونتشما14هستش.اینکارروباسایزفونتخودتانجامبده

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48587633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档