如何以编程方式将按钮添加到不会叠加在一起的布局上?

时间:2015-07-08 03:46:01

标签: java android

我尝试使用文件buttons.txt中的JSONObject中定义的按钮来创建一个自身填充的布局。从文件生成按钮有效,但问题是按钮全部堆叠在一起。我尝试在按钮上添加不同的LayoutParams,但只有定义与布局本身关系的参数似乎有效,而且没有一个改变与其他子视图的关系。如何将按钮放入" flow"布局?

private void createButtons(RelativeLayout layout, JSONObject jo, RelativeLayout.LayoutParams lp){

        Iterator<?> keys = jo.keys();

        while( keys.hasNext() ) {
            String key = (String)keys.next();
            Button newButton = new Button(this);
            newButton.setText(key);
            layout.addView(newButton, lp);

            JSONObject subCat = null;

            try {
                subCat = jo.getJSONObject(key);
            } catch (JSONException e) {
                subCat = null;
            }

            if ( subCat instanceof JSONObject ) {
                createButtons(layout, (JSONObject) subCat, lp);
            }
        }
    }


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    RelativeLayout rl = (RelativeLayout)findViewById(R.id.main_layout);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(111, 111);
    lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
    lp.addRule(RelativeLayout.RIGHT_OF);

    AssetManager am = getAssets();
    String json = null;
    try {
        InputStream is = am.open("buttons.txt");
        json = readFully(is, "utf-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    JSONObject jo = null;
    try {
        jo = (JSONObject) new JSONTokener(json).nextValue();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    createButtons(rl, jo, lp);
}

1 个答案:

答案 0 :(得分:0)

您将在相对布局中为所有按钮提供相同的布局参数,这将叠加它们。尝试将它们添加到线性布局中,然后按顺序添加它们。您也可以将居中应用于线性布局,但它们不会叠加。