用另一个视图替换视图

时间:2013-10-29 09:57:17

标签: android

我似乎找不到并回答的一个一般性问题。

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

这通常如何在Android中完成?我读了很多不同的建议,比如Fragments(一个按钮?),或者相对布局等等,但我只是想用另一个相同大小的视图替换一个视图,也可以稍后为它设置动画。

4 个答案:

答案 0 :(得分:1)

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

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

但是,您似乎只需要更改按钮的标签,并根据您可以在活动中维护的状态来处理它。例如。首先它是一个开始按钮,然后一个停止。这更容易编程,也更快。

答案 1 :(得分:1)

要隐藏一个视图,只需调用setVisibility(View.GONE),这将使视图就像在布局中一样。要显示视图,请调用setVisiblity(View.VISIBLE)。

答案 2 :(得分:1)

您可以在一个布局中使用两个组件(例如按钮和按钮)来管理它。一个将具有参数visibility =“gone”和一个visibility =“visible”。因此,您只需在代码中更改此值。

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

答案 3 :(得分:1)

我认为这可以帮助你。

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

希望它能帮助你,如果你想要布局,那么我也可以发布。