3

我有一个ScrollView作为父母。里面有一个LinearLayoutwithImageViewTabHost。我更改了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);
    }
}

我怎样才能避免这种滚动?

4

1 回答 1

1

还有另一个类似的问题,我在其中发布了答案。基本上我扩展了 ScrollView 并覆盖了computeScrollDeltaToGetChildRectOnScreen.

不需要滚动的原因是,在requestChildFocusScrollView 中默认滚动到焦点视图(例如 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>
于 2016-09-14T13:25:12.340 回答