如何通过方向更改控制视图可见性(可见/不可见)? [复制]

Posted

技术标签:

【中文标题】如何通过方向更改控制视图可见性(可见/不可见)? [复制]【英文标题】:How can I control views visibility (visible/invisible) with orientation change? [duplicate] 【发布时间】:2016-12-29 17:16:22 【问题描述】:

我想设计这样的布局:

纵向模式xml:

<RelativeLayout>
    <ToolBar>
    <ToolBar>
    <TextView>
    </TextView>
    <VideoView>
    <VideoView>
    <Webview>
    </Webview>
</RelativeLayout>

横向模式xml:

 <RelativeLayout>
    <VideoView>
    <VideoView>
 </RelativeLayout>

横向模式下其他视图将不可见。提前致谢。我是android开发的新手。

【问题讨论】:

【参考方案1】:

由于您的布局包含视频视图,我认为您不想在此页面上播放视频。

为了防止活动重新播放和视频重新启动,您应该将android:configChanges="orientation|screenSize" 添加到活动声明中,而不是在onConfigurationChanged 中管理布局

只需在onCreate`` than show hide them inonConfigurationChanged`中查找视图```

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    // setContentView and another onCreate logic code

    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    textview = findViewById(R.id.textview);
    webView = findViewById(R.id.webview);
    videoView = findViewById(R.id.videoview);

    updateLayout(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);


@Override
public void onConfigurationChanged(Configuration newConfig) 
    super.onConfigurationChanged(newConfig);
    updateLayout(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE);


private void updateLayout(boolean isLandscape)   
    if (isLandscape) 
        textview.setVisibility(View.GONE);
        webview.setVisibility(View.GONE);
        getSupportActionBar().hide();
     else 
        textview.setVisibility(View.VISIBLE);
        webview.setVisibility(View.VISIBLE);
        getSupportActionBar().show();
    

【讨论】:

谢谢。它工作完美。您节省了最多 2 天的时间。@Pogonets Antom【参考方案2】:

您可以为两个不同的方向创建两个不同的布局xml文件,并将文件存储在layout目录中的纵向模式和layout-land目录中的横向模式res 目录下的 目录。 我认为这样做比在运行时管理可见性更好

【讨论】:

这会在旋转时中断视频播放 @PogonetsAnton 抱歉,我没有玩过VideoView。如果它坏了,那么最好还是用你的答案。 对不起。我的视频视图与@Pogonets Antom 答案完美配合。 @AslamHossin 太好了,我很高兴听到这个消息。快乐的编码朋友。也给他一票 如何设置视频视图的LayoutParams。纵向模式:videoView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 200));对于横向模式: videoView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));工作中。请帮助或建议。

以上是关于如何通过方向更改控制视图可见性(可见/不可见)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在活动中更改列表视图的按钮可见性

WICKET:控制组件在更改 CheckBox 时的可见性

如何处理自定义 android 视图/小部件的可见性更改

更改列表视图中图像的可见性

如何控制 Java 中变量的可见性?

如何在显示android后更改自定义对话框中的视图的可见性