我的布局如下所示:
<?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
的错误答案 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相同。由于在开头添加了解释,我的答案仍然存在。