更改布局和布局中的ScrollView(水平/垂直)

时间:2015-08-23 18:03:34

标签: android android-layout

我创建了一个layout-land文件夹并复制了我的activity_main.xml文件,这样我就可以重新定位一些视图,使其更适合于横向查看。一切都很好,直到我改变ScrollView;肖像使用垂直和横向使用水平。我的应用程序将崩溃,因为它无法将ScrollView转换为Horizo​​ntalScrollView,反之亦然。

android.widget.ScrollView cannot be cast to android.widget.HorizontalScrollView

不幸的是,两个方向都不能使用相同的HorizontalScrollViewVerticalScrollView,因为它会变得混乱,并且无法按预期使用滚动功能。

我已经查看了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>

2 个答案:

答案 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 作为视图,并在实际调用所需方法时强制转换为 Horizo​​ntalScrollView ScrollView

答案 1 :(得分:0)

尝试:

FrameLayout scrollView = (FrameLayout) findViewById(R.id.scrollView);