gpt4 book ai didi

java - getmeasuredheight 在使用 ReplacementSpan 时返回 0 或相同

转载 作者:太空狗 更新时间:2023-10-29 14:36:15 28 4
gpt4 key购买 nike

ShadowSpan.java

public class ShadowSpan extends ReplacementSpan {
public ShadowSpan(int color, PointF offset){
}
@Override
public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) {
return (int)paint.measureText(text,start,end);
}

@Override
public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) {
canvas.drawText(text,start,end,x,y,paint);
}}

主 Activity .java

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String tx = "sssss3333";
SpannableString sp = new SpannableString(tx);
ShadowSpan ss = new ShadowSpan(Color.GRAY,new PointF(8,8));
AbsoluteSizeSpan as = new AbsoluteSizeSpan(100);
sp.setSpan(ss,0,tx.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
sp.setSpan(as,0,tx.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
TextView tv = new TextView(this);
tv.setText(sp, TextView.BufferType.SPANNABLE);
tv.measure(0,0);
int h = tv.getMeasuredHeight();
int w = tv.getMeasuredWidth();
FrameLayout fl = (FrameLayout)getWindow().getDecorView().findViewById(android.R.id.content);
fl.addView(tv);
}}

以上就是我的全部代码,很简单,但是有一个很奇怪的问题。

如果我使用ReplacementSpan,并且如果debug是真机,那么getMeasuredHeight只会返回0或者相同的值,如果debug是虚拟设备,那么getMeasuredHeight会返回正确的值。

但是不管是真机还是虚拟设备,getMeasuredWidth返回的值都是正确的。

这是构建环境:compileSdk版本27minSdkVersion 15targetSdkVersion 27

真机是sangsumg Galaxy Note 9

更新:我有一些新发现,即使在虚拟设备上,如果使用API​​27,也会有问题,API28没问题,真机API是28

最佳答案

通过查看TextLine.java源码,因为ReplacementSpan继承自MetricAffectingSpan,在处理MetricAffectingSpan的过程中处理Text,然后处理CharactorStyle,而当MetricAffectingSpan为ReplacementSpan时,则直接绘制继续,下面CharactorStyle 根本没有处理

关于java - getmeasuredheight 在使用 ReplacementSpan 时返回 0 或相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55015632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com