我有一个弹出窗口,它会在相对布局和列表视图中膨胀列表视图,从而使相对布局中的文本视图膨胀。弹出窗口的宽度默认匹配父事件,尽管我已经在布局文件和编程方式中定义了无处不在的内容。
我希望有一个弹出窗口的宽度,通过获取最大文本视图的宽度,然后将所有文本左对齐,以粗体字体与白色对齐,将文本视图的内容包装在列表视图中背景(未读消息)和灰色背景中的普通字体(读取消息)。
最长文字的宽度,例如,'覆盆子(晚上8:11)'粗体字体是203.我试图以编程方式创建弹出窗口后使用popupWindow.setWidth(maximum_width)
来分配它。
(某些对此问题不够具体的行已被删除)。
// int maximum_height = 0;
int maximum_width = 0;
public View getView(int position, View view, ViewGroup viewgroup) {
...
// if(height > maximum_height)
// {
// maximum_height = height;
// }
if(width > maximum_width)
{
maximum_width = width;
}
...
}
textView1.getHeight()
和textView1.getWidth()
的以下功能始终返回0.为什么?
因此,基于Stack Overflow中的一些建议,我尝试了以下替代方法和方法:
textView1.measure(0, 0);
int width = textView1.getMeasuredWidth();
这是第一次返回0,第二次返回180,从那时起返回195。
在第一次使用时,只要在列表视图中为文本视图返回宽度为0,然后我也会收到以下警告消息。为什么呢?
W / InputEventReceiver:尝试完成输入事件,但输入事件接收器已经被处理掉。
通过使用这段代码:
Rect bounds = new Rect();
Paint textPaint = textView1.getPaint();
textPaint.getTextBounds(name, 0, name.length(), bounds);
int width = bounds.width();
第一次返回0,从那时起返回195.
另外,为什么:
switch(read)
{
case 0:
textPaint.setTypeface(Typeface.BOLD);
break;
case 1:
textPaint.setTypeface(Typeface.NORMAL);
break;
}
给出一条错误消息,指出setTypeface(android.graphics.Typeface)不能应用于(int)?有没有办法让任何人知道它可以解决?
通过使用这段代码:
Rect bounds = new Rect();
Paint textPaint = textView1.getPaint();
textPaint.measureText(name, 0, name.length());
int width = bounds.width();
它总是返回0.
通过使用这段代码:
TextPaint paint = new TextPaint();
int width = (int) Math.ceil(paint.measureText(name));
它第一次返回0,从那时起返回111.
通过使用这段代码:
int width = (int) Math.ceil(textView1.getTextSize());
它总是返回21,这是错误的使用方式,因为textView1.getTextSize()的功能是专门为获取textView1中的字符数而保留的。
是否有任何替代方法或方法可以在列表视图中获得正确的文本视图宽度大小,可以是带有白色背景的粗体字体(未读消息)和灰色背景中的普通字体(读取)消息),然后将所有文本对齐到左边?请帮帮我。
在列表视图中为文本视图获取宽度值为195的值与203的大小的正确值略差。是否实际绘制和测量的文本是正常的字体,不考虑并考虑粗体字的文字?在这里有没有人知道它可以用in?
textView1.getHeight()
和textView1.getWidth()
的以下函数始终返回0.对于任何可用于弹出窗口的Android活动,是否存在类似于public void onWindowFocusChanged(boolean hasFocus)
的函数窗口使得其宽度可以在绘制后以编程方式调整和设置为列表视图中所有文本视图的最大宽度。通过使用以下这段代码,
view2.post(new Runnable() {
public void run() {
windows.showAtLocation(layout,Gravity.CENTER, 0, 0);
}
});
在解决这个问题的过程中,它似乎也没有任何帮助。
提前谢谢。