为什么我动态添加两个按钮时只出现一个按钮?
Why is only one button appearing when I dynamically add two?
我在一个方法中有此代码,其中 listOfTeamsJoined
肯定有两个团队。
for (Team t : listOfTeamsJoined)
{
makeTeamButton(t.display_name);
}
调用此方法的方法:
private void makeTeamButton(String teamName)
{
Button newTeamButton = new Button(this);
LinearLayout teamButtonHolder = (LinearLayout) findViewById(R.id.availableTeamsList);
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
newTeamButton.setBackgroundColor(Color.parseColor("#00C272"));
newTeamButton.setTextColor(Color.parseColor("#FFFFFF "));
newTeamButton.setText(teamName);
teamButtonHolder.addView(newTeamButton);
}
问题是只有一个会显示。我怀疑其中一个正在被另一个取代,或者它们出现在彼此之上。但是,由于我使用的是 LinearLayout
,我认为它们不应该出现在彼此之上,据我所知,addView
不会替换视图,它只是附加它们。但是,如果我重新排序列表,那么我可以让另一个出现,它们只是不会一起出现。
你的 LinearLayout 是什么方向的?似乎它被设置为水平并且你希望它们彼此重叠所以 "vertical" 应该是这里的正确选择。
你是动态添加了两个新按钮,但你看到它显示一个按钮,因为它是由于彼此重叠而发生的。所以给彼此一些边距或填充,然后你会看到它。希望对你有所帮助
默认方向是水平的。两个按钮的宽度都使用 MATCH_PARENT
的宽度。这意味着您的第一个按钮将占用整个宽度,不会为第二个按钮留下任何内容,从而使其不可见。
如果您希望 LinearLayout
像这样垂直,请手动设置方向:
teamButtonHolder.setOrientation(LinearLayout.VERTICAL);
如果您希望保持水平,只需将宽度和高度分别反转为 WRAP_CONTENT
和 MATCH_PARENT
。这也行,但它会并排显示它们。
当您将按钮宽度设置为 match_parent
时,如下所示:
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
您必须将 LinearLayout
的方向设置为 vertical
;
但是如果您想将这些按钮设置为 horizontally
,则将宽度参数设置为 wrap_content
,例如:
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
我在一个方法中有此代码,其中 listOfTeamsJoined
肯定有两个团队。
for (Team t : listOfTeamsJoined)
{
makeTeamButton(t.display_name);
}
调用此方法的方法:
private void makeTeamButton(String teamName)
{
Button newTeamButton = new Button(this);
LinearLayout teamButtonHolder = (LinearLayout) findViewById(R.id.availableTeamsList);
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
newTeamButton.setBackgroundColor(Color.parseColor("#00C272"));
newTeamButton.setTextColor(Color.parseColor("#FFFFFF "));
newTeamButton.setText(teamName);
teamButtonHolder.addView(newTeamButton);
}
问题是只有一个会显示。我怀疑其中一个正在被另一个取代,或者它们出现在彼此之上。但是,由于我使用的是 LinearLayout
,我认为它们不应该出现在彼此之上,据我所知,addView
不会替换视图,它只是附加它们。但是,如果我重新排序列表,那么我可以让另一个出现,它们只是不会一起出现。
你的 LinearLayout 是什么方向的?似乎它被设置为水平并且你希望它们彼此重叠所以 "vertical" 应该是这里的正确选择。
你是动态添加了两个新按钮,但你看到它显示一个按钮,因为它是由于彼此重叠而发生的。所以给彼此一些边距或填充,然后你会看到它。希望对你有所帮助
默认方向是水平的。两个按钮的宽度都使用 MATCH_PARENT
的宽度。这意味着您的第一个按钮将占用整个宽度,不会为第二个按钮留下任何内容,从而使其不可见。
如果您希望 LinearLayout
像这样垂直,请手动设置方向:
teamButtonHolder.setOrientation(LinearLayout.VERTICAL);
如果您希望保持水平,只需将宽度和高度分别反转为 WRAP_CONTENT
和 MATCH_PARENT
。这也行,但它会并排显示它们。
当您将按钮宽度设置为 match_parent
时,如下所示:
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));
您必须将 LinearLayout
的方向设置为 vertical
;
但是如果您想将这些按钮设置为 horizontally
,则将宽度参数设置为 wrap_content
,例如:
newTeamButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
));