在横向模式下,ScrollView 中的 ListView 和 WebView 无法按预期工作
In landscape mode, the ListView and WebView inside ScrollView not working as expected
我知道我不能在 ScrollView
中使用 ListView
,因为在这种情况下 ScrollView
获得焦点并且 ListView
变得不可滚动。但是我有一个程序可以同时滚动 ListView
和 ScrollView
。(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 View
在Activity
中有它自己的目的。
但我在 Landscape
模式下有两个问题。
[我无法使用 activity-land
因为我正在 WebView
]
中播放视频
- 单击按钮时
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
标签。
我知道我不能在 ScrollView
中使用 ListView
,因为在这种情况下 ScrollView
获得焦点并且 ListView
变得不可滚动。但是我有一个程序可以同时滚动 ListView
和 ScrollView
。(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 View
在Activity
中有它自己的目的。
但我在 Landscape
模式下有两个问题。
[我无法使用 activity-land
因为我正在 WebView
]
- 单击按钮时
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
标签。