java使用TableLayout,按钮正在脱离边缘
我试图通过编程来制作一个表格布局,我的第一行calling
很好。但是在我的第二行geo
,按钮openGeo
离开了屏幕的右边缘,尽管我试图使用与第一行相同的加权逻辑(Button
占用它需要的任何空间,EditText
占用其余空间)
我也试过了
- 从
EditText
中移除权重-->;同样的问题 - 将权重添加到按钮
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);
}
# 1 楼答案
一些物品被放在外面的原因可能是因为一些文本比其他文本长,因此占据了更多的空间。要使权重正常工作,请使用布局宽度
0dp
而不是wrap_content