提前感谢您的帮助。
我正在尝试将一个垂直加权的TextView对象添加到LinearLayout。
//root container
LinearLayout rootContainer = new LinearLayout(activity);
rootContainer.setOrientation(LinearLayout.HORIZONTAL);
rootContainer.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,1f));
rootContainer.setBackgroundColor(Color.parseColor("#000000"));
//Text View
TextView instructions = new TextView(activity);
instructions.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.MATCH_PARENT,.7f));
instructions.setText(survey.instructions);
instructions.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
instructions.setBackgroundColor(Color.RED);
rootContainer.addView(instructions);
当我使用上面的代码时,我得到一个空白屏幕。但是,如果我发表评论
instructions.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.MATCH_PARENT,.7f));
出现TextView(虽然不是我想要的尺寸)。
从我看过的所有内容中,这是生成加权TextView的方法(按屏幕大小垂直加权)。我做错了什么?
答案 0 :(得分:1)
你可以用这个代替你拥有的东西:
instructions.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 0.7f));
它在app启动时没有显示的原因是因为在java代码中定义视图时,它用像素定义它,所以当你将宽度设置为0时,它肯定是不可见的。这与在xml布局文件中定义它不同。
希望有所帮助。
答案 1 :(得分:0)
代码
instructions.setLayoutParams(new LinearLayout.LayoutParams(0,
LayoutParams.MATCH_PARENT,.7f));
将文本视图的宽度设置为0意味着不会查看它会尝试使用某些值替换0或者使用LayoutParams.WRAP_CONTENT
答案 2 :(得分:0)
我认为这个问题的公认答案是错误的。
这不起作用的原因是因为LinearLayout
设置了vertical
方向,而TextView
是使用width
权重构建的:
instructions.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT,.7f));
应该是:
instructions.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, .7f));
此外,由于TextView是LinearLayout的唯一子项,因此weightSum
属性应设置为1以达到70%的比率:
rootContainer.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
rootContainer.setWeightSum(1);