Scrollview中的TabHost滚动内容更改

时间:2012-07-20 05:38:09

标签: java android scrollview android-tabhost

我有父母ScrollView。里面有LinearLayout ImageViewTabHost。我通过活动更改了TabHost的内容。在更改内容时,Tabhost向下滚动到它自己的标签,标题不再可见。我该如何防止这种情况?

我的main.xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 
    android:id="@+id/mainScroll"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal" >


    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/tabhost"
        android:layout_width="800px"
        android:layout_height="fill_parent"
        android:layout_gravity="center_horizontal" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:padding="5dp" >

            <ImageView
                android:id="@+id/header"
                android:layout_width="800px"
                android:layout_height="200px"
                android:src="@drawable/header" />

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="wrap_content"
                android:layout_height="50px" />

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:padding="5dp" />
        </LinearLayout>

    </TabHost>
</ScrollView>

我的更改内容的活动:

    public class UeberActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ueber);
    }
}

如何避免滚动?

1 个答案:

答案 0 :(得分:1)

还有另一个类似的question,我在那里发布了答案。基本上我扩展了ScrollView并覆盖了computeScrollDeltaToGetChildRectOnScreen

不需要滚动的原因是,requestChildFocus默认情况下,ScrollView会滚动到焦点视图(例如TabHost)。 computeScrollDeltaToGetChildRectOnScreen用于计算增量滚动以显示视图。

爪哇:

public class MyScrollView extends ScrollView {
    public MyScrollView(Context context) {
        super(context);

    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    @Override
    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
        // This function calculates the scroll delta to bring the focused view on screen.
        // -> To prevent unsolicited scrolling to the focued view we'll just return 0 here.
        //
        return 0;
    }
}

XML:

<YOUR.PAKAGE.NAME.MyScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
</YOUR.PAKAGE.NAME.MyScrollView>