我创建了一个layout-land文件夹并复制了我的activity_main.xml文件,这样我就可以重新定位一些视图,使其更适合于横向查看。一切都很好,直到我改变ScrollView
;肖像使用垂直和横向使用水平。我的应用程序将崩溃,因为它无法将ScrollView转换为HorizontalScrollView,反之亦然。
android.widget.ScrollView cannot be cast to android.widget.HorizontalScrollView
不幸的是,两个方向都不能使用相同的HorizontalScrollView
或VerticalScrollView
,因为它会变得混乱,并且无法按预期使用滚动功能。
我已经查看了stackoverflow和谷歌,但由于问题的措辞,可能找不到任何相关内容。什么是最好的解决方案?我是否必须在Java代码中创建ScrollView
而不是通过xml?
编辑 - 请求的代码: 好的,所以我的MainActivity onCreate()有
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
在我的layout \ activity_main.xml中我正在使用
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/scrollView"
android:visibility="visible">
....
</ScrollView>
在land \ activity_main.xml
中<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/scrollView"
android:visibility="visible">
....
</HorizontalScrollView>
答案 0 :(得分:0)
如果您不使用任何 ScrollView 特定功能,则可以将其声明为查看。如果这样做,您需要单独处理它们,因为它们是不同的类:
if (isLandscape())
mHorizontalScrollView = (HorizontalScrollView)findViewById(R.id.scrollView);
else
mScrollView = (ScrollView)findViewById(R.id.scrollView);
isLandscape()在哪里:
private boolean isLandscape() {
return getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
然后,只要您想使用滚动视图,请检查方向并使用正确的方向。或者,您只能使用一个成员 mScrollView 作为视图,并在实际调用所需方法时强制转换为 HorizontalScrollView 或 ScrollView 。
答案 1 :(得分:0)
尝试:
FrameLayout scrollView = (FrameLayout) findViewById(R.id.scrollView);