我尝试使用文件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);
}
答案 0 :(得分:0)
您将在相对布局中为所有按钮提供相同的布局参数,这将叠加它们。尝试将它们添加到线性布局中,然后按顺序添加它们。您也可以将居中应用于线性布局,但它们不会叠加。