为什么我动态添加两个按钮时只出现一个按钮?

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_CONTENTMATCH_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
   ));