如何管理 ConstraintLayout 中重叠按钮的可见性和启用状态?

问题描述 投票:0回答:1

我的 Android 应用程序中的

ConstraintLayout
有两个按钮:
startButton
stopButton
。两个按钮具有相同的约束,因此它们位于彼此的顶部。当活动开始时,我只希望开始按钮可见且可点击,而停止按钮应该不可见。

我目前正在使用以下代码来实现此目的:

startButton.setVisibility(View.VISIBLE);
stopButton.setVisibility(View.INVISIBLE);

我的问题是:

  1. 是否有必要像这样同时设置两个按钮的 isEnabled 属性?
startButton.setEnabled(true);
stopButton.setEnabled(false);
  1. 如果需要设置
    isEnabled
    ,为什么需要设置?

我想确保 startButton 可见且可点击,stopButton 在 Activity 启动时完全隐藏且不可点击。

布局 XML:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/stopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Stop"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Java代码:

public class MainActivity extends AppCompatActivity {

    private Button startButton;
    private Button stopButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startButton = findViewById(R.id.startButton);
        stopButton = findViewById(R.id.stopButton);

        startButton.setVisibility(View.VISIBLE);
        stopButton.setVisibility(View.INVISIBLE);

        // Optional:
        // startButton.setEnabled(true);
        // stopButton.setEnabled(false);
    }
}

初始状态:

startButton
应可见且可点击,
stopButton
应不可见且不可点击。 我是否需要显式设置两个按钮的
isEnabled
属性,或者管理可见性(View.VISIBLE 和 View.INVISIBLE)足以满足我的要求吗?任何详细的解释或最佳实践将不胜感激。

android android-layout
1个回答
0
投票

除了设置

stopButton.setVisibility(View.INVISIBLE);
,您还可以设置
stopButton.setVisibility(View.GONE)
。 当设置
View.GONE
时,约束被放松并且元素“消失”。您可以在布局视图中检查这一点。更改时可以再次设置
stopButton.setVisibility(View.VISIBLE)

另一种选择是仅使用一个按钮,而不是更改可见性,您还可以根据是否需要启动或停止来更改

onClick
参数以及
text
参数。

© www.soinside.com 2019 - 2024. All rights reserved.