在横向模式下,ScrollView 中的 ListView 和 WebView 无法按预期工作

In landscape mode, the ListView and WebView inside ScrollView not working as expected

我知道我不能在 ScrollView 中使用 ListView,因为在这种情况下 ScrollView 获得焦点并且 ListView 变得不可滚动。但是我有一个程序可以同时滚动 ListViewScrollView。(Mr. Arshu 给出了很好的答案)

我的结构 activity_main.xml

<RelativeLayout    >

<ScrollView 
    android:fillViewport="true"  >

    <LinearLayout   >

        <TextView />

        <TextView  />

        <LinearLayout   >

            <Button
                android:id="@+id/button1"   />

            <Button
                android:id="@+id/button2"   />

        </LinearLayout>

        <RelativeLayout 
            android:visibility="gone"  >

            <WebView />

            <ImageView   />

        </RelativeLayout>

        <LinearLayout   >

            <TextView  />

            <TextView />

            <TextView />

            <TextView />
            
        </LinearLayout>
    </LinearLayout>
</ScrollView> 

<LinearLayout 
    android:layout_alignParentBottom="true" >

    <ImageView />

    <Button />

    <ListView
        android:visibility="gone"  />
</LinearLayout>

</RelativeLayout>

这在纵向时非常有效mode.Each ViewActivity 中有它自己的目的。

但我在 Landscape 模式下有两个问题。 [我无法使用 activity-land 因为我正在 WebView]

中播放视频
  1. 单击按钮时 ListView 可见。

portrait 模式下显示所有项目(例如:10)。当我将模式更改为横向时,ListView 不会完全滚动,它只显示 5 或 5 1/2 个项目。

2.WebView 可见性在 Button 单击时启用。

如果假设我在纵向模式下启用 webview 并且视频开始播放,并且在两者之间如果我将模式更改为 Landscape 那么 WebView 会消失但视频不会停止。我能听到视频了。

我尝试使用 savedInstanceState 来控制 view

代码片段:

button1.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        if(savedInstanceState==null)
        {
            String uriPath = "http://player.vimeo.com/***/****";
            Layout.setVisibility(View.VISIBLE);
            myWebView.setWebViewClient(new WebViewClient());
            myWebView.getSettings().setJavaScriptEnabled(true);
            myWebView.loadUrl(uriPath);
        }else {
            Layout.setVisibility(View.VISIBLE);
            myWebView.restoreState(savedInstanceState);
        }
    }
});

ListView 的图像:

纵向:

横向:

如何解决这两个问题。

请帮忙。

谢谢。

希望这个针对您的视图的触摸侦听器可以帮助您解决问题。

Yourview.setOnTouchListener(new OnTouchListener() {
        // Setting on Touch Listener for handling the touch inside
        // ScrollView
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // Disallow the touch request for parent scroll on touch of
            // child view
            v.getParent().requestDisallowInterceptTouchEvent(true);
            return false;
        }
    });

你自己处理方向变化怎么样 我是说 android:configChanges="keyboardHidden|orientation|screenSize" 将上述属性添加到 Manifest 文件中的 Activity 标签。