用另一个视图替换视图

问题描述:

一个我似乎无法找到和回答的一般问题。用另一个视图替换视图

说我在我的活动中有一个线性布局的开始按钮。当用户按下开始时,我希望它被替换为一个不同的按钮(不仅仅是改变标签),说停止。在一个网站上,我只需隐藏一个按钮并显示另一个按钮(或淡出一个,在零不透明度下隐藏并显示另一个按钮并淡入)。

这通常在Android中完成?我阅读了很多不同的建议,比如Fragments(对于一个按钮?),或者相关的布局或者其他任何东西,但我只是想用另一个相同大小的视图来替换一个视图,并且稍后也可以对它进行动画处理。

+0

您可以在按下时更改按钮的文字,也可以通过VISIBILITY完成。 –

+0

您可以简单地通过btn.setText(“stop”)设置按钮的文本; – jyomin

+0

谢谢,但我说它应该是一个不同的按钮(不只是更改标签)。 – PFort

要隐藏一个视图,只需调用setVisibility(View.GONE),它将使视图看起来好像从未在您的布局中一样。显示视图调用setVisiblity(View.VISIBLE)。

你可以做的一件事是覆盖按钮,例如使用Relativelayout,并确保按钮完美对齐(例如,通过设置android:layout_alignLeft,顶部,底部和右侧)。然后,将其中一个的可见性设置为VISIBLE,将其他人的可见性设置为INVISIBLE(视图不可见,但它仍占用空间用于布局)或GONE(视图不可见,并且不占用任何空间用于布局目的)。

当用户单击一个按钮时,您将更改可见性。在这里,您甚至可以应用任何您想要的动画,例如您提及的淡入/淡出。

但是,您似乎只需更改按钮的标签,并根据您的活动状态来处理该标签。例如。首先它是一个开始按钮,然后是一个停止。编程起来更容易,而且速度更快。

您可以在一个布局中使用两个组件(例如,按钮和按钮)来管理它。一个会有参数可见性=“消失”和一个可见性=“可见”。所以你只需要在代码中改变这个值。

btnFirst.setVisibility(View.VISIBLE); 
btnSecond.setVisibility(View.GONE); 

我认为这可以帮到你。

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final Button button_1 = (Button) findViewById(R.id.button1); 
     final Button button_2 = (Button) findViewById(R.id.button2); 
     button_2.setVisibility(View.INVISIBLE); 
     button_1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       button_1.setVisibility(View.INVISIBLE); 
       button_2.setVisibility(View.VISIBLE); 
      } 
     }); 
     button_2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       button_2.setVisibility(View.INVISIBLE); 
       button_1.setVisibility(View.VISIBLE); 
      } 
     }); 
    } 

如果你想创建你的按钮2动态,那么你可以使用

 RelativeLayout layout = (RelativeLayout) findViewById(R.id.RelativeLayout1); 
     Button button_2= new Button(getApplicationContext()); 
     button_2.setText("button 2"); 
     button_1.setVisibility(View.INVISIBLE); 
     layout.addView(button_2, button_1.getLayoutParams()); 

,而不是

final Button button_2 = (Button) findViewById(R.id.button2); 

希望它会帮助你,如果你想布局那么我也可以帖子。