有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用TableLayout,按钮正在脱离边缘

我试图通过编程来制作一个表格布局,我的第一行calling很好。但是在我的第二行geo,按钮openGeo离开了屏幕的右边缘,尽管我试图使用与第一行相同的加权逻辑(Button占用它需要的任何空间,EditText占用其余空间)

我也试过了

  • EditText中移除权重-->;同样的问题
  • 将权重添加到按钮openGeo-->;同样的问题
  • 重新排列顺序(首先是按钮,然后是EditTexts)-->;解决了边缘问题,但我想在最后的按钮

因此,我知道屏幕能够支持所有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) 个答案

  1. # 1 楼答案

    一些物品被放在外面的原因可能是因为一些文本比其他文本长,因此占据了更多的空间。要使权重正常工作,请使用布局宽度0dp而不是wrap_content