gpt4 book ai didi

java - 检测布局中的第一个按钮

转载 作者:行者123 更新时间:2023-12-02 04:41:11 24 4
gpt4 key购买 nike

我正在尝试解决这个难题:“如何让列表中的其余按钮位于第一个按钮下方。”

为了解决这个问题,我尝试设置一个 boolean 值来检测第一个按钮,并将规则应用于该按钮下面的任何内容,但button1似乎每次都在button0之上。

我在下面列出了 MainActivity。布局 xml 中只有一个相对布局。

public class MainActivity extends Activity implements View.OnClickListener {

private ArrayList<Category> categories = new ArrayList<Category>();
private ArrayList<Button> buttons = new ArrayList<Button>();
private boolean firstButton = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

RelativeLayout relLayout = (RelativeLayout) findViewById(R.id.mainLayout);

categories.add(new Category("Mobility",CategoryTypes.MOBILITY));
categories.add(new Category("Flexibility",CategoryTypes.FLEXIBILITY));
categories.add(new Category("Mobility",CategoryTypes.MOBILITY));
categories.add(new Category("Flexibility",CategoryTypes.FLEXIBILITY));
categories.add(new Category("Mobility",CategoryTypes.MOBILITY));
categories.add(new Category("Mobility",CategoryTypes.MOBILITY));

for (int i = 0; i < 6; i++)
{
makeButton(this, "Buttons"+i,i);
}

for (int i = 0; i < buttons.size(); i++)
{
addButtonToLayout(buttons.get(i),relLayout,i);
System.out.println(buttons.get(i).getLayoutParams());
}
}

//This method constructs a button object, sets its text, id and an OnClickListener. Finally adds the buttons to buttons arraylist
void makeButton (Context context, String buttonText, int id)
{
Button button = new Button(context);
button.setText(buttonText);
button.setId(id);
button.setOnClickListener(this);

buttons.add(button);
System.out.println(button.getId());
}

//Method to add button to layout. The LayoutParams are used to add the rule that the buttons should be underneath each other.
void addButtonToLayout (Button button, RelativeLayout layout, int index)
{
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams paramsForSecondButton = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

if (firstButton)
{
firstButton = false;
System.out.println(buttons.get(index).getText());
//TODO: [BUG] Doesn't add the first button for some reason.
}
else if (!firstButton)
{
params.addRule(RelativeLayout.BELOW, buttons.get(index-1).getId());
}

//paramsForSecondButton.addRule(RelativeLayout.BELOW, buttons.get(0).getId());

//params.addRule(RelativeLayout.BELOW, buttons.get(index).getId());
button.setLayoutParams(params);
// buttons.get(1).setLayoutParams(paramsForSecondButton);

layout.addView(button);
}

这是布局的图像: image of layout

最佳答案

有一个answer类似的问题应该对你有帮助。

The reason this is failing for you is because of the IDs you are using. Android uses "reserved" ids for things like the general content area of the app.

Using your code, I was able to add 1000 to each ID and generate the intended result.

以这种方式放置按钮也不是一个好主意。除非您有理由这样做,否则简单的 LinearLayout 将以一半的计算时间完成这项工作。

关于java - 检测布局中的第一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com