我正试图以编程方式制作一个TableLayout,我的第一行calling
很好。但在我的第二行geo
,按钮openGeo
是离开屏幕的右边缘,即使我试图使用相同的加权逻辑,因为我做了第一行(Button
需要任何空间,EditText
s采取其余的)
我也试过
- 从
EditText
s中移除权重-->同样的问题 - 添加权重按钮
openGeo
->同样的问题 - 重新安排顺序(按钮首先出现,然后是
EditText
s) ->修复了边缘问题,但我希望按钮在结束
所以我知道屏幕能够支持所有5个View
,因为重新排列顺序不会将EditText
推离边缘。我怎样才能维持这个顺序,但又使它像它应该的那样合适呢?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_interact_ui);
TableLayout layout = (TableLayout)findViewById(R.id.interactUILayout);
TableRow calling = new TableRow(this);
TableRow geo = new TableRow(this);
final EditText number = new EditText(this);
number.setInputType(EditorInfo.TYPE_CLASS_PHONE);
number.setHint("###-###-####");
Button call = new Button(this);
call.setText("Call");
call.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
call(number.getText().toString());
}
});
final EditText address = new EditText(this);
address.setHint("Address");
final EditText street = new EditText(this);
street.setHint("Street");
final EditText city = new EditText(this);
city.setHint("City");
final EditText state = new EditText(this);
state.setHint("State");
Button openGeo = new Button(this);
openGeo.setText("Maps");
openGeo.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
openGeo(address.getText().toString(),street.getText().toString(), city.getText().toString(), state.getText().toString());
}
});
calling.addView(number, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
calling.addView(call);
geo.addView(address, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
geo.addView(street, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
geo.addView(city, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
geo.addView(state, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
geo.addView(openGeo);
layout.addView(calling);
layout.addView(geo);
}
将一些条目放在外面的原因可能是因为一些文本比其他文本长,因此占用了更多的空间。为使权重正常工作,使用0dp
而不是wrap_content
的布局宽度