我正在以编程方式从SQLite数据库编写表。
在循环中,我正在生成所需的TextViews
,并且当数据长于现有屏幕允许时,我尝试将数据包装在TextView
descCol
中。
以下链接提供了执行此操作的建议: Setting width to wrap_content for TextView through code
然而,当使用任何建议的方法时,我得到java.lang.NullPointerException
。
这是我的代码示例:
TextView descCol = new TextView(this);
descCol.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
在这种情况下,调试显示它会在java.lang.NullPointerException
行上抛出getLayoutParams()
。
我也试过了:
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);
在这种情况下,调试显示它会在java.lang.NullPointerException
行上抛出params.height
。
Debug显示在执行getLayoutParams()
方法后的任何一种情况下,params等于null,显然抛出异常。
我尝试在descCol
之前先将其他参数分配给getLayoutParams()
(文字颜色,文字,重力等),但得到的结果相同。
有关如何避免java.lang.NullPointerException
的建议将不胜感激。
答案 0 :(得分:4)
尝试这种方式:
LinearLayout.LayoutParams textParam = new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
textView.setLayoutParams(textParam);
答案 1 :(得分:3)
我还可以通过简单地使用setWidth和setHeight方法以编程方式完成我的任务。
textview.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
textview.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
答案 2 :(得分:1)
为什么你甚至没有设置布局Params时使用getLayoutParams()? 你需要先设置Layay Params。像这样。
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);