Android视图权重与文本无关

Android视图权重与文本无关,android,layout,Android,Layout,我试图创建一个2*X大小的表,我希望列的宽度相等。我如何做到这一点?我已经尝试了LinearLayout和tabelLayout,只要每个单选按钮上的文本相同,这两种方法都可以很好地工作,但如果不是这样,它们会不均匀地分割空间(即使有足够的空间容纳具有相等分割的文本)。我曾考虑过在运行时设置宽度,但我的getWidth()返回0。非常感谢您的帮助 另外,我没有使用XML 代码: 导入。。。。 公共类SpendoryGroup扩展了LinearLayout实现OnCheckedChangeList

我试图创建一个2*X大小的表,我希望列的宽度相等。我如何做到这一点?我已经尝试了LinearLayout和tabelLayout,只要每个单选按钮上的文本相同,这两种方法都可以很好地工作,但如果不是这样,它们会不均匀地分割空间(即使有足够的空间容纳具有相等分割的文本)。我曾考虑过在运行时设置宽度,但我的getWidth()返回0。非常感谢您的帮助

另外,我没有使用XML

代码:

导入。。。。
公共类SpendoryGroup扩展了LinearLayout实现OnCheckedChangeListener{
私有GUI_属性GUI_属性;
专用单选按钮[]按钮;
选择的专用单选按钮=空;
公共spendoratigroup(上下文、属性集属性){
超级(上下文,attrs);
gui\u attrs=新的gui\u attrs(上下文,attrs);
这个.setBackgroundColor(gui_attrs.color_Z1);
此.setOrientation(LinearLayout.VERTICAL);
此.setPadding(gui_attrs.padding_Z1、gui_attrs.padding_Z1/2、gui_attrs.padding_Z1、gui_attrs.padding_Z1/2);
RadioButton[]基站=新的RadioButton[2];
基站[0]=新单选按钮(上下文);
基站[0].setText(“第1项”);
BTN[1]=新单选按钮(上下文);
BTN[1].setText(“第2项”);
这是设置单选按钮(BTN,“说明:”);
}
公共void setRadioButtons(RadioButton[]按钮,字符串指令){
此参数为.removeAllViews();
TextView tvInstruction=新的TextView(gui属性上下文);
tvInstruction.setTextColor(颜色:黑色);
tvInstruction.setText(指令);
tvInstruction.setTextSize(gui_attrs.textSize_tiny);
此.addView(tvInstruction);
这个按钮=按钮;
LinearLayout.LayoutParams param=新的LayoutParams(LinearLayout.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.WRAP_内容);
参数重量=1;
对于(int i=0;i0){
行=新的线性布局(gui_属性上下文);
行设置背景颜色(gui属性颜色Z1);
行设置填充(gui_attrs.padding_Z1、gui_attrs.padding_Z1/2、gui_attrs.padding_Z1、gui_attrs.padding_Z1/2);
param=新的LayoutParams(LinearLayout.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.WRAP_内容);
参数重量=0.8f;
TextView tvDiv=新的TextView(gui_attrs.context);
tvDiv.setLayoutParams(参数);
row.addView(tvDiv);
按钮[buttons.length-1].setGravity(Gravity.CENTER);
row.addView(按钮[buttons.length-1]);
tvDiv=新文本视图(gui属性上下文);
tvDiv.setLayoutParams(参数);
row.addView(tvDiv);
此.addView(行);
}
}
@凌驾
检查更改后的公共void(CompoundButton视图,布尔值已选中){
如果(选中){
对于(int i=0;i
无论您是使用XML布局屏幕还是以编程方式进行布局。单选按钮、文本等首先按其大小分布,然后在线性布局视图之间均匀分布生成的自由空间

示例:您有一个水平方向的线性布局,其中有两个视图。第一个视图的宽度为48倾角,第二个视图的宽度为12倾角。两者重量相同,线性布局宽度为96°

示例中的Androids布局:发生的情况是,Android为两个视图提供了它们所需的内容,并将它们之间的可用空间计算为
96dip-(48dip+12dip)=36dip
。现在,36倾角均匀分布在两个视图之间,每个视图的倾角
=18。现在,每个视图都位于其自身宽度+18倾角的空间内。视图的位置取决于
布局\u重力

如果在线性布局中需要大小均匀的视图,请为它们指定相同的权重,并将其宽度(水平分布)或高度(垂直分布)设置为
“0dip”

尽管如此,您必须以这种方式定义
LinearLayout.LayoutParams
。在您的示例中,这意味着大小相等的列的代码为:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, height, 1f);
请注意,
width
参数设置为0,以便LinearLayout的所有可用空间在视图之间均匀分布。

getWidth()将返回0,直到绘制视图为止,您可以使用ViewTreeObserver进行此操作。为了
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, height, 1f);