没有内置函数可以进行比较。
经过多次研究和编码,我已经构建了自己的函数来完成这个任务...
1)将此代码复制到您的项目中
import android.app.Activity;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.widget.TextView;
public class TextMeasure {
public static boolean isTextCanFitInTextView(TextView textView, String txt , float allowWidthInDp , Activity activity){
String backupText = textView.getText().toString();
textView.setText(txt);
textView.measure(0, 0);
float textViewSize_px = textView.getMeasuredWidth();
float dip = allowWidthInDp;
Resources r = activity.getResources();
float allowView_px = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
r.getDisplayMetrics()
);
textView.setText(backupText);
return textViewSize_px <= allowView_px;
}
public static boolean isTextCanFitInTextView_matchParent(TextView textView, String txt , float totalMarginInDp, Activity activity){
String backupText = textView.getText().toString();
textView.setText(txt);
textView.measure(0, 0);
float textViewSize_px = textView.getMeasuredWidth();
float dip = totalMarginInDp;
Resources r = activity.getResources();
float totalMarginInDp_px = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
r.getDisplayMetrics()
);
float allowView_px;
float window_length;
window_length = getDisplayWidthInPixel(activity);
allowView_px = window_length - totalMarginInDp_px;
textView.setText(backupText);
return textViewSize_px <= allowView_px;
}
private static float getDisplayWidthInPixel(Activity activity){
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
return metrics.widthPixels;
}
}
2) 使用上述类方法进行文本和TextView的比较,例如:
1)了解确切的宽度,android:layout_width="300dp"
TextView yourTextView = findViewById(R.id.txt);
float widthOfTextView_inDp = 300f;
String yourTxt = "your text need to display in single line";
if (TextMeasure.isTextCanFitInTextView(yourTextView,yourTxt,widthOfTextView_inDp,this)){
yourTextView.setText(yourTxt);
}else {
}
2) match_parent 用于设置宽度。
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_width="match_parent"
TextView yourTextView = findViewById(R.id.txt);
float totalMargin_inDp = 20f;
String yourTxt = "your text need to display in single line";
if (TextMeasure.isTextCanFitInTextView_matchParent(yourTextView,yourTxt,totalMargin_inDp,this)){
yourTextView.setText(yourTxt);
}else {
}