一个我似乎无法找到并回答的一般性问题。
假设我的活动中有一个线性布局的开始按钮。当用户按下开始时,我希望它被一个不同的按钮(不仅仅是更改标签)替换为停止。在一个网站上,我只是隐藏一个按钮并显示另一个按钮(或淡出一个并以零不透明度隐藏它并显示另一个并淡入)。
这通常在 Android 中是如何完成的?我阅读了很多不同的建议,例如片段(一个按钮?),或相对布局或其他什么,但我只想用另一个相同大小的视图替换一个视图,并可能稍后对其进行动画处理。
一个我似乎无法找到并回答的一般性问题。
假设我的活动中有一个线性布局的开始按钮。当用户按下开始时,我希望它被一个不同的按钮(不仅仅是更改标签)替换为停止。在一个网站上,我只是隐藏一个按钮并显示另一个按钮(或淡出一个并以零不透明度隐藏它并显示另一个并淡入)。
这通常在 Android 中是如何完成的?我阅读了很多不同的建议,例如片段(一个按钮?),或相对布局或其他什么,但我只想用另一个相同大小的视图替换一个视图,并可能稍后对其进行动画处理。
我认为这可以帮助你。
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);
希望它会帮助你,如果你想要布局那么我也可以发布。
您可以做的一件事是覆盖按钮,例如使用Relativelayout,并确保按钮完美对齐(例如通过设置android:layout_alignLeft
、顶部、底部和右侧)。然后,将其中一个的可见性设置为VISIBLE
,将其他设置为INVISIBLE
(视图不可见,但仍为布局目的占用空间)或GONE
(视图不可见,并且不为布局目的占用任何空间)。
当用户单击一个按钮时,您就可以更改可见性。在这里,您甚至可以应用您想要的任何动画,例如您提到的淡入/淡出。
但是,您似乎只需要更改按钮的标签,并根据您可以在活动中维护的状态来处理它。例如,首先它是一个开始按钮,然后是一个停止按钮。这更容易编程,而且速度更快。
要隐藏一个视图,只需调用 setVisibility(View.GONE) 即可使视图就好像它从未出现在您的布局中一样。显示视图调用 setVisiblity(View.VISIBLE)。
您可以在一个布局中使用两个组件(例如 Button 和 Button)来管理它。一个将有参数 visibility="gone" 和一个 visibility="visible"。因此,您只需在代码中更改此值。
btnFirst.setVisibility(View.VISIBLE);
btnSecond.setVisibility(View.GONE);