linearLayout.setVisibility(View.GONE)
时间: 2023-04-06 18:02:42 浏览: 128
这是一个关于 Android 开发的问题,我可以回答。这行代码的作用是将一个 LinearLayout 控件设置为不可见。具体来说,它会将该控件的布局参数设置为 GONE,这意味着该控件不会占用任何空间,也不会对布局产生影响。
相关问题
startActivity 打开的窗口中 oncreate里面设置LinearLayout setVisibility(View.GONE)失败
`startActivity`是用来启动一个新的活动(Activity),而你在新打开的窗口(Activity)的`onCreate()`方法中设置布局(如`LinearLayout`)的可见性为`View.GONE`可能会失效,原因有以下几点:
1. **生命周期顺序**:`onCreate()`是在Activity创建时调用的,如果在这个阶段设置视图的可见性,可能是因为界面元素还没有完全初始化完成。你应该在`onStart()`、`onResume()`或更晚的方法(比如`setContentView()`之后)设置。
2. **异步加载**:如果你在`setContentView()`之前设置了视图不可见,那么内容可能还没有添加到布局中。确保在UI已经加载完毕后再操作布局。
3. **线程问题**:避免在主线程(UI线程)上直接修改视图属性,这可能导致ANR异常。应该在`runOnUiThread()`或者通过Handler回调在UI线程中处理。
4. **资源未找到**:检查布局文件ID是否正确,以及所引用的控件是否存在。
解决这个问题的一个示例代码片段可以是这样的:
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 确保先加载布局
LinearLayout linearLayout = findViewById(R.id.linear_layout);
if (linearLayout != null) { // 检查视图是否找到
runOnUiThread(() -> linearLayout.setVisibility(View.GONE)); // 在UI线程设置可见性
}
}
```
布局是这么写的 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/poi_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false" android:orientation="horizontal"> <RelativeLayout android:id="@+id/poi_list_container" android:layout_width="360dp" android:layout_height="wrap_content" android:background="@drawable/bg_list_circular" android:visibility="gone"> <ListView android:id="@+id/poi_list" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" /> </RelativeLayout> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:focusable="true" /> </RelativeLayout> </LinearLayout>
那么你可以在RelativeLayout隐藏时,手动设置mapview的左边距为0,这样可以保证mapview填充整个父容器,不会出现黑屏的情况。具体代码如下:
```
relativeLayout.setVisibility(View.GONE);
// 将mapview的左边距设置为0
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mapView.getLayoutParams();
params.weight = 3;
params.width = 0;
mapView.setLayoutParams(params);
```
你需要将上述代码放到隐藏RelativeLayout的地方,这样就可以保证在RelativeLayout隐藏后,mapview会自动填充整个父容器,不会出现黑屏的情况。
阅读全文