我正在尝试在主LinearLayout中创建多个线性布局。但我在保证金方面遇到了一些麻烦。这是我的代码和输出: -
public class CustomActivity extends Activity {
private LinearLayout mainLayout;
Float value;
int dpi;
private String[] data = new String[] {"Hello World", "Hello World", "Hello World", "Hello World", ""};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom);
mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
mainLayout.setOrientation(LinearLayout.VERTICAL);
value = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
dpi = Math.round(value);
addLayouts();
}
private void addLayouts() {
int marginBottom = 0;
int count = 0;
for (int i = 0; i < data.length; i++) {
OutLinedLL linearLayout = new OutLinedLL(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dpi*22,dpi*35);
if(i==0)
{
linearLayout.setBackgroundColor(Color.RED);
params.setMargins(dpi*7, dpi, dpi*4, marginBottom);
linearLayout.setLayoutParams(params);
mainLayout.addView(linearLayout);
}
else
{
count += dpi*2;
Log.e("Count", count+"");
marginBottom -= (dpi*28)+count;
Log.e("Margin Bottom", marginBottom+"");
linearLayout.setBackgroundColor(Color.GREEN);
params.setMargins(dpi*7, dpi, dpi*4, marginBottom);
linearLayout.setLayoutParams(params);
mainLayout.addView(linearLayout);
}
marginBottom = 0;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_custom, menu);
return true;
}
}
堆栈追踪: -
09-29 11:49:23.844: E/Count(16149): 40
09-29 11:49:23.844: E/Margin Bottom(16149): -600
09-29 11:49:23.852: E/Count(16149): 80
09-29 11:49:23.852: E/Margin Bottom(16149): -640
09-29 11:49:23.852: E/Count(16149): 120
09-29 11:49:23.852: E/Margin Bottom(16149): -680
09-29 11:49:23.852: E/Count(16149): 160
09-29 11:49:23.852: E/Margin Bottom(16149): -720
输出: -
正如您所看到的,所有布局的边距底部都不相同。我无法找出它为什么会发生。我正在尝试学习自定义视图,以便真正感谢任何帮助。
感谢。
答案 0 :(得分:0)
如果我理解您希望最终布局如何,我不是100%确定。
然而,听起来像线性布局的相对布局可以达到所需的外观和功能,同时“更轻”。
如果我误解了你的目标,我很抱歉,但在这种情况下,你可以更清楚地解决这个问题。
答案 1 :(得分:0)
我认为这是你的问题:
marginBottom -= (dpi*28)+count;
您正在更改每个循环的保证金金额。只需将其设置为静态值,您的所有视图都应具有相同的边距。