Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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
Android-测量文本的高度_Android_Listview - Fatal编程技术网

Android-测量文本的高度

Android-测量文本的高度,android,listview,Android,Listview,我从中复制了代码,它工作得几乎完美,问题是作者将列表项的高度设置为固定值,并且它没有在我的设备上正确显示 代码将列表项的高度设置为150,我想嘿,我只测量文本的高度,所以我调用 Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG); Rect bounds = new Rect(); paint.getTextBounds("April 3, 2016", 0, 13, bounds); Log.d("Fr

我从中复制了代码,它工作得几乎完美,问题是作者将列表项的高度设置为固定值,并且它没有在我的设备上正确显示

代码将列表项的高度设置为150,我想嘿,我只测量文本的高度,所以我调用

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
Rect bounds = new Rect();
paint.getTextBounds("April 3, 2016", 0, 13, bounds);
Log.d("Fragment.toggle", "Text height is " + bounds.height());
对于稍微大于150固定值的文本,从getTextBounds返回的文本高度为12。因为12不大于150,我显然做错了什么

我一生中写过很多软件,但这是我做Android开发的第一天,所以我可能在做一些明显愚蠢的事情。我怀疑这两个值150和12的单位不同,但我在文档中翻了翻,弄不清楚


如何计算文本的高度,以AblistView.LayoutParams所期望的任何单位为单位?

我终于提出了这个问题

答案的第一部分是,getTextBounds的返回代码是以点为单位的,如果文档中这样说不是很好吗?。答案除以72,以英寸为单位给出文本高度,再乘以DisplayMetrics.densityDpi,以像素为单位给出文本高度

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.LINEAR_TEXT_FLAG);
Rect bounds = new Rect(0, 0, 10000, 10000);
paint.getTextBounds("April 3, 2016", 0, 13, bounds);
DisplayMetrics dm = getActivity().getResources().getDisplayMetrics();
float textHeightInches = bounds.height() / 72.0f;
float textHeightPixels = textHeightInches * dm.densityDpi;
答案的第二部分是,在计算总高度时,列表项的顶部和底部必须包含填充

LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout listItemLayout = (LinearLayout)vi.inflate(R.layout.list_item, null);
int collapsedHeight = (int)(textHeightPixels + 0.5f) + listItemLayout.getPaddingTop() + listItemLayout.getPaddingBottom();

现在,当我创建ListItem对象时,我可以传入我计算的高度,而不是一个固定的数字。

对于这个特定调用,您希望Paint对象返回什么?我不明白你怎么会认为它有明显的问题。如果你想用文本视图显示文本,用sp缩放像素设置文本大小,Android会做其他的一切。感谢大家的参与,问题是我已经够一个Android新手了,我甚至不知道该怎么问这个问题。如果你点击这个问题的链接,这是另一个StackOverflow页面,标题是“我怎样才能让Android中的ListView中的单元格在被触摸时垂直展开和收缩?”?。对于列表项的高度,比如150,它有硬编码的值,我想计算这些值,而不是硬编码。所以我想说的是,我的问题可能没有多大意义,超出了我试图实现的原始StackOverflow问题的上下文。我不认为我应该在这个问题上添加我的评论,因为我的问题不是他们的代码而是我的理解,但也许这是一个更好的提问的地方?