如何通过编程使活动布局可见?

时间:2018-02-05 15:18:33

标签: android layout constraints

我的布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="invisible">
    <LinearLayout
        android:layout_height="match_parent"

        ...

相关活动如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_login);// here is the layout
}

我试图通过以下方式使其可见:

LinearLayout layoutActLogin = (LinearLayout) findViewById(R.layout.act_login);
layoutActLogin.setVisibility(View.VISIBLE);

但Android Studio告诉我有关于R.layout.act_login

的错误

3 个答案:

答案 0 :(得分:4)

findViewById用于观看,而不是布局。

您应该在视图中添加ID,如:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="invisible">
    <LinearLayout
        android:layout_height="match_parent"

        ...

然后获取视图参考并使其可见

View viewActLogin = findViewById(R.id.my_view);
viewActLogin.setVisibility(View.VISIBLE);

答案 1 :(得分:0)

您无法更改Layout的可见性。你只能改变里面的观点的可见性。

您可以在布局中使用id标记为您的视图指定android:id。您可以阅读有关此here的更多信息。

在你的情况下。只需向您的View/ViewGroup提供一些ID,并在您的活动中引用View并使用findViewById方法并更改其可见性。

答案 2 :(得分:0)

您误解了布局和视图的工作原理。布局定义了活动期间屏幕上显示给用户的内容,通过在活动setContentView()方法中调用onCreate()来设置。视图是布局中的单个元素,可使用R.id使用findViewById()前缀访问。

在您的示例中,您需要向根ConstraintLayout(使用android:id)应用ID才能访问它:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="invisible">

然后您可以使用以下方式访问它:

ConstraintLayout layoutActLogin = (ConstraintLayout) findViewById(R.id.parent_layout);
layoutActLogin.setVisibility(View.VISIBLE);

编辑查看您的代码我现在意识到您想要控制根ConstraintLayout,这使得我的答案几乎与Eduardo Herzer相同。由于在开头添加了解释,我的答案仍然存在。