【问题标题】: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开发的新手。

【问题讨论】:

    标签: android android-layout android-xml


    【解决方案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));工作中。请帮助或建议。
    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    相关资源
    最近更新 更多