Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较屏幕的宽度大小和字符串的大小?_Java_Android_String - Fatal编程技术网

Java 如何比较屏幕的宽度大小和字符串的大小?

Java 如何比较屏幕的宽度大小和字符串的大小?,java,android,string,Java,Android,String,因此,出于我的特殊原因,我需要确保字符串(放置在文本视图中)的大小(以像素为单位)不超过设备的宽度大小(以像素为单位)。要获得屏幕的宽度,我使用: final float scale = context.getResources().getDisplayMetrics().density; WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display

因此,出于我的特殊原因,我需要确保
字符串(放置在文本视图中)的大小(以像素为单位)不超过设备的宽度大小(以像素为单位)。要获得屏幕的宽度,我使用:

    final float scale = context.getResources().getDisplayMetrics().density;
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    try{
        Point size = new Point();
        display.getSize(size);
        screenWidth = size.x;
    }catch(NoSuchMethodError e){
        screenWidth = display.getWidth();
    }
    screenWidth = screenWidth - ((int) (10 * scale + 0.5f)); //takes into account a 10dp margin
要获得我使用的字符串的长度:

paint.measureText(string);

其中string是
string
对象,paint是
paint
对象我面临的问题是:
measureText
方法是说
字符串
小于屏幕的长度,即使它长得多。我忽略了什么吗?有没有更好的方法?任何帮助、建议或建议都将不胜感激!谢谢

用我提供的代码,我的问题的答案并不容易找到。因为我提供的代码是正确的。问题是我创建了
Paint
对象,如下所示:

Paint paint = new Paint();
然后我引用了
measureText(string)
方法。问题是它没有考虑我给这个
TextView
子类的文本大小。因此,为了解决这个问题,我所要做的就是将上述代码更改为:

Paint paint = this.getPaint();
我通常使用:

 paint.getTextBounds
对于这种情况,我发现它非常准确


我还发现,在自定义版本的
TextView
中覆盖
onSizeChanged
(其他内容保持不变)意味着我可以在需要时直接确定视图的大小。

要计算字符的宽度,需要知道字符的大小。这会随着非单声道字体的不同而变化。那么,公式是(字符大小)*(字符串大小)吗?其中(字符大小)可能等于最大字符大小(M),而(字符串大小)可能等于
paint.measureText
method?我的另一个问题是
paint.measureText()
如何在不参考字符大小的情况下计算大小?不,您需要枚举每个字符并计算其大小。然后把它们加在一起。