【问题标题】:Android - how to make a button display on a condition?Android - 如何在条件下显示按钮?
【发布时间】:2012-04-17 04:59:00
【问题描述】:

我有一个按钮,基本上是这样的:

 <Button
    android:id="@+id/admin_new_questions"        
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="See Asked Questions"
    />    

我只在某些情况下尝试显示它:

if ( clause )
{
        Button admin_see_questions = (Button)findViewById(R.id.admin_new_questions);   
        admin_see_questions.setOnClickListener(new Button.OnClickListener() 
        {  
            public void onClick(View v) 
            {
           ....    
            }
        });        
}

但由于某种原因,所有情况下都会显示按钮,但如果子句出错,则不会监听监听器。

如何让按钮仅在子句为真时才显示?

谢谢!

【问题讨论】:

  • 其他人已经正确回答了您的问题,但我想就用户体验问题向您提供建议。我认为 hide 不是这样做的正确方法。恕我直言,正确的方法是始终显示按钮,但如果子句为假则禁用它,如果它为真则启用它:)

标签: android


【解决方案1】:

您的按钮在 XML 布局中,因此您可以通过更改其 visibility 来隐藏或显示它

注意:您只需要执行这些操作一次

  1. 使用findViewById() 获取对您的按钮的引用
  2. 设置按钮的OnClickListener

    <Button
    android:id="@+id/admin_new_questions"        
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="See Asked Questions"
    
    android:visibility="invisible" //Initially hide the button
    
    />    
    

-

Button admin_see_questions = (Button)findViewById(R.id.admin_new_questions);   
admin_see_questions.setOnClickListener(new Button.OnClickListener() 
{  
    public void onClick(View v) 
    {
        ....       
    }
});  

if ( clause )
{
    admin_see_questions.setVisibility(View.VISIBLE); //SHOW the button
}

【讨论】:

    【解决方案2】:

    默认显示在 XML 中声明的所有 UI 组件。您需要:

    1. 指定它在布局 XML 中不可见

      <Button ...
       android:visibility="gone"
       />
      
    2. 如果条件评估为假,则隐藏它:

      Button admin_see_questions = (Button)findViewById(R.id.admin_new_questions);
      if ( !clause ) {
          admin_see_questions.setVisibility(View.GONE);
      }
      

    【讨论】:

      【解决方案3】:

      您可以在setVisibility 中使用View.GONEView.VISIBLE 来控制这一点,作为起点。

      您是否使用 View.GONE 或其他类似值取决于您是否希望在布局中考虑此按钮。

      您可以查看此问题以获取更多信息:

      Android: why setVisibility(View.GONE); or setVisibility(View.INVISIBLE); do not work

      您也可以只禁用它,使其可见,但不活动,这可能是一个更好的选择。

      【讨论】:

        【解决方案4】:

        使用 admin_see_questions.setVisibility(View.GONE)admin_see_questions.setVisibility(View.VISIBLE)

        【讨论】:

          【解决方案5】:

          您没有设置按钮的可见性。它们是三个可见性选项,可见、不可见和消失。以下代码应该可以根据子句显示或隐藏按钮。

          Button admin_see_questions = (Button)findViewById(R.id.admin_new_questions); 
          if ( clause )
          {  
                  admin_see_questions.setVisibility(View.VISIBLE);
                  admin_see_questions.setOnClickListener(new Button.OnClickListener() 
                  {  
                      public void onClick(View v) 
                      {
                     ....    
                      }
                  });        
          } else admin_see_questions.setVisibility(View.INVISIBLE); //may want to use View.GONE here depending on what you want to accomplish
          

          【讨论】:

            【解决方案6】:

            .setVisibility(View.GONE);隐藏

            ViewGroup 组 = (ViewGroup)(myView.getParent()); grouo.removeView(myView);删除

            【讨论】:

              【解决方案7】:

              当条件满足时试试这个

              if ( clause )
              {
              admin_see_questions.setVisibility(admin_see_questions.VISIBLE);
              }
              else
              admin_see_questions.setVisibility(admin_see_questions.INVISIBLE);
              

              【讨论】:

                【解决方案8】:

                您需要移除或隐藏该按钮。尝试使用admin_see_questions.setVisibility(View.INVISIBLE)admin_see_questions.setVisibility(View.GONE)。要再次显示该按钮,请致电admin_see_questions.setVisibility(View.VISIBLE)

                【讨论】:

                  【解决方案9】:

                  在 xml 中将按钮的初始状态设置为 Gone/Invisible,然后检查代码中的条件。

                  <Button
                      android:id="@+id/admin_new_questions"        
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:text="See Asked Questions"
                      android:visibility="gone"
                      />
                  

                  如果条件为真或假,则:

                  Button admin_see_questions = (Button)findViewById(R.id.admin_new_questions);
                  admin_see_questions.setOnClickListener(new Button.OnClickListener() 
                  {  
                      public void onClick(View v) 
                      {
                         ....    
                      }
                  });
                  
                  if ( clause )
                      admin_see_questions.setVisibility(View.VISIBLE);  
                  else
                      admin_see_questions.setVisibility(View.GONE);
                  

                  【讨论】:

                  • 你的代码永远不会编译。您的按钮不在 else 子句的范围内。
                  猜你喜欢
                  • 2023-01-02
                  • 2022-01-05
                  • 2021-12-14
                  • 2015-09-04
                  • 1970-01-01
                  • 2015-09-20
                  • 2016-08-24
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多