如何以编程方式将TextView的宽度和高度设置为Wrap Content。

8

我正在从SQLite数据库中以编程方式编写表格。

在循环中,我正在生成所需的TextViews,并在数据超出现有屏幕时尝试将数据包装在名为descColTextView中。

以下链接提供了实现此操作的建议:Setting width to wrap_content for TextView through code

但是,当使用任何一种建议方法时,都会遇到java.lang.NullPointerException错误。

这里是我的代码示例:

TextView descCol = new TextView(this);
descCol.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;

在这种情况下,调试显示在getLayoutParams() 行上抛出了一个java.lang.NullPointerException
此外,我已经尝试过:
TextView descCol = new TextView(this);
ViewGroup.LayoutParams params = descCol.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
descCol.setLayoutParams(params);

在这种情况下,调试显示它在params.height行抛出了java.lang.NullPointerException
调试显示,在执行getLayoutParams()方法后,无论哪种情况,params都等于null,显然会抛出异常。
我尝试先为descCol(文本颜色、文本、重力等)分配其他参数,然后再执行getLayoutParams(),但结果相同。
欢迎提出如何避免java.lang.NullPointerException的建议。

1
在设置LayoutParams之前,或者将View添加到ViewGroup中,View是没有LayoutParams的。在你的两个代码片段中,getLayoutParams()都返回了null。 - Mike M.
3个回答

10

我还能够通过使用 setWidth 和 setHeight 方法以编程方式完成我的任务。

textview.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
textview.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);

我正在将此代码用于Google Maps标记中,它可以正常工作,但是会在所有视图下方添加大量的空白空间。 - xjcl
我认为这将把宽度和高度设置为-1像素,假设ViewGroup.LayoutParams.WRAP_CONTENT返回-1。 - Benur21

4
尝试这种方法:
  LinearLayout.LayoutParams textParam = new LinearLayout.LayoutParams
                        (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);

    textView.setLayoutParams(textParam);

1
当您没有设置布局参数时,为什么要使用getLayoutParams()?您需要先设置setLayoutParams。像这样:
 TextView view = new TextView(this);
 view.setText("example textview ");
 //adding layout properties 
 view.setLayoutParams(new LinearLayout.LayoutParams
                    (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0));
// add the textview to the parentLayout
parentLayout.addView(view);

谢谢大家。在上面的链接中,他们忘记在示例代码中包含view.setLayoutParams方法。注意:在您的示例代码Mezzy中有一个错别字(末尾多了一个“);”)。嘿,这种事情发生在最好的人身上。 - Bill
@Bill 感谢您的指出,我已经更新了它。如果我的回答对您有帮助,您可以给我点个赞。 - MezzDroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接