【问题标题】:Why is only one button appearing when I dynamically add two?为什么我动态添加两个按钮时只出现一个按钮?
【发布时间】:2016-08-15 18:28:04
【问题描述】:

我在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 方向。
  • 哇,我觉得很傻,原来是这个问题

标签: android android-linearlayout android-button dynamically-generated


【解决方案1】:

默认方向是水平的。您使用MATCH_PARENT 的宽度作为两个按钮的宽度。这意味着您的第一个按钮将占据整个宽度,第二个按钮不会留下任何内容,从而使其不可见。

如果您希望LinearLayout 像这样垂直,请手动设置方向:

teamButtonHolder.setOrientation(LinearLayout.VERTICAL);

如果您希望保持水平,则只需将宽度和高度分别反转为WRAP_CONTENTMATCH_PARENT。这也可以,但它会并排显示它们。

【讨论】:

    【解决方案2】:

    您的 LinearLayout 有什么方向?似乎它设置为水平,并且您希望它们彼此叠放,因此“垂直”应该是正确的选择。

    【讨论】:

      【解决方案3】:

      您正在动态添加两个新按钮,但是当您看到它时会显示一个按钮,因为它是由于彼此重叠而发生的。所以给彼此一些边距或填充,然后你会看到它。希望对你有帮助。

      【讨论】:

        【解决方案4】:

        当您将按钮宽度设置为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
           ));
        

        【讨论】:

          猜你喜欢
          • 2017-03-18
          • 1970-01-01
          • 2014-05-12
          • 2010-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多