Android ScrollView在调用子视图上的setVisibility(View.VISIBLE)后滚动到顶部

Android ScrollView在调用子视图上的setVisibility(View.VISIBLE)后滚动到顶部,android,scroll,scrollview,visibility,Android,Scroll,Scrollview,Visibility,我有一个ScrollView,里面有一个RelativeLayout。这个RelativeLayout中有几个视图。这几个视图中的一个是复选框。选中/取消选中复选框时,其他一些视图s应相应地出现/消失。出现和消失工作正常,但每次目标视图s出现或消失时,ScrollView一直滚动到顶部,我被迫向下滚动查看发生了什么 我用于控制可见性的代码是: public void crossCountryCheckboxClicked(View view) { CheckBox crossCountr

我有一个
ScrollView
,里面有一个
RelativeLayout
。这个
RelativeLayout
中有几个
视图。这几个
视图
中的一个是
复选框
。选中/取消选中
复选框时,其他一些
视图
s应相应地出现/消失。出现和消失工作正常,但每次目标
视图
s出现或消失时,
ScrollView
一直滚动到顶部,我被迫向下滚动查看发生了什么

我用于控制可见性的代码是:

public void crossCountryCheckboxClicked(View view)
{
    CheckBox crossCountryCheckBox = (CheckBox)findViewById(R.id.checkbox_cross_country);
    EditText crossCountryHoursTextBox = (EditText)findViewById(R.id.cross_country_hours);
    if (crossCountryCheckBox.isChecked())
    {
        crossCountryHoursTextBox.setVisibility(View.VISIBLE);
    }
    else
    {
        crossCountryHoursTextBox.setVisibility(View.GONE);
    }
}
通过在XML布局文件中的
CheckBox
元素上指定
android:onClick
属性,调用
crossCountryCheckboxClicked()
方法

以下是XML布局文件:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/logbook.app.activities"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/flight_date"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/aeroplane_type"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/flight_date"
        android:hint="@string/aeroplane_type" />

    <EditText
        android:id="@+id/aeroplane_registration"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/aeroplane_type"
        android:hint="@string/aeroplane_registration" />

    <EditText
        android:id="@+id/pilot_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/aeroplane_registration"
        android:hint="@string/pilot_name" />

    <EditText
        android:id="@+id/copilot_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/pilot_name"
        android:hint="@string/copilot_name" />

    <EditText
        android:id="@+id/from_aerodome"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/copilot_name"
        android:hint="@string/from_aerodome" />

    <EditText
        android:id="@+id/to_aerodome"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/copilot_name"
        android:layout_toRightOf="@id/from_aerodome"
        android:hint="@string/to_aerodome" />

    <EditText
        android:id="@+id/remarks"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/from_aerodome"
        android:hint="@string/remarks" />

    <Spinner
        android:id="@+id/aircraft_engine_type_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/remarks" />

    <Spinner
        android:id="@+id/time_of_day_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/aircraft_engine_type_spinner" />

    <Spinner
        android:id="@+id/pilot_role_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/time_of_day_spinner" />

    <TextView
        android:id="@+id/on_time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/pilot_role_spinner"
        android:hint="@string/on_time_hint" />

    <TextView
        android:id="@+id/takeoff_time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/on_time"
        android:hint="@string/takeoff_time_hint" />

    <TextView
        android:id="@+id/landing_time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/takeoff_time"
        android:hint="@string/landing_time_hint" />

    <TextView
        android:id="@+id/off_time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/landing_time"
        android:hint="@string/off_time_hint" />

    <Button
        android:id="@+id/button_record"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/off_time"
        android:onClick="recordTime"
        android:padding="5dp"
        android:text="@string/button_record" />

    <Button
        android:id="@+id/button_reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/off_time"
        android:layout_toRightOf="@id/button_record"
        android:onClick="resetAllTimes"
        android:padding="5dp"
        android:text="@string/button_reset" />

    <CheckBox
        android:id="@+id/checkbox_ifr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_record"
        android:text="@string/checkbox_ifr"
        android:onClick="ifrCheckboxClicked" />

    <CheckBox
        android:id="@+id/checkbox_cross_country"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button_record"
        android:layout_toRightOf="@id/checkbox_ifr"
        android:text="@string/checkbox_cross_country"
        android:onClick="crossCountryCheckboxClicked" />

    <Spinner
        android:id="@+id/ifr_type_spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/checkbox_ifr"
        android:visibility="gone" />

    <TextView
        android:id="@+id/label_ifr_approaches"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/ifr_type_spinner"
        android:hint="@string/ifr_landings_label"
        android:visibility="gone" />

    <logbook.app.custom.widgets.NumberSelector
        android:id="@+id/ifr_landings_selector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/label_ifr_approaches"
        android:visibility="gone"
        custom:orientation="vertical" />

    <EditText
        android:id="@+id/ifr_hours"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/ifr_landings_selector"
        android:hint="@string/ifr_hours_hint"
        android:inputType="number"
        android:visibility="gone" />

    <EditText
        android:id="@+id/cross_country_hours"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/ifr_hours"
        android:hint="@string/cross_country_hours_hint"
        android:inputType="number"
        android:visibility="gone" />

    <TextView
        android:id="@+id/label_takeoffs_landings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/cross_country_hours"
        android:hint="@string/takeoffs_landings_label" />

    <logbook.app.custom.widgets.NumberSelector
        android:id="@+id/landings_selector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/label_takeoffs_landings"
        custom:orientation="horizontal" />

    <Button
        android:id="@+id/button_create_log"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/landings_selector"
        android:onClick="createLog"
        android:padding="5dp"
        android:text="@string/button_create_log" />

</RelativeLayout>

视图的一个子视图在
视图.消失
视图.可见
之间更改时,如何阻止
滚动视图
滚动到顶部?

尝试以下操作:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation = "vertical" >

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
   android:layout_height="wrap_content" >

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<TextView
    android:id="@+id/flight_date"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

<EditText
    android:id="@+id/aeroplane_type"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/flight_date"
    android:hint="@string/aeroplane_type" />

<EditText
    android:id="@+id/aeroplane_registration"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/aeroplane_type"
    android:hint="@string/aeroplane_registration" />

<EditText
    android:id="@+id/pilot_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/aeroplane_registration"
    android:hint="@string/pilot_name" />

<EditText
    android:id="@+id/copilot_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/pilot_name"
    android:hint="@string/copilot_name" />

<EditText
    android:id="@+id/from_aerodome"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/copilot_name"
    android:hint="@string/from_aerodome" />

<EditText
    android:id="@+id/to_aerodome"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/copilot_name"
    android:layout_toRightOf="@id/from_aerodome"
    android:hint="@string/to_aerodome" />

<EditText
    android:id="@+id/remarks"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/from_aerodome"
    android:hint="@string/remarks" />

<Spinner
    android:id="@+id/aircraft_engine_type_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/remarks" />

<Spinner
    android:id="@+id/time_of_day_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/aircraft_engine_type_spinner" />

<Spinner
    android:id="@+id/pilot_role_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/time_of_day_spinner" />

<TextView
    android:id="@+id/on_time"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/pilot_role_spinner"
    android:hint="@string/on_time_hint" />

<TextView
    android:id="@+id/takeoff_time"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/on_time"
    android:hint="@string/takeoff_time_hint" />

<TextView
    android:id="@+id/landing_time"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/takeoff_time"
    android:hint="@string/landing_time_hint" />

<TextView
    android:id="@+id/off_time"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/landing_time"
    android:hint="@string/off_time_hint" />

<Button
    android:id="@+id/button_record"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/off_time"
    android:onClick="recordTime"
    android:padding="5dp"
    android:text="@string/button_record" />

<Button
    android:id="@+id/button_reset"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/off_time"
    android:layout_toRightOf="@id/button_record"
    android:onClick="resetAllTimes"
    android:padding="5dp"
    android:text="@string/button_reset" />

<CheckBox
    android:id="@+id/checkbox_ifr"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button_record"
    android:text="@string/checkbox_ifr"
    android:onClick="ifrCheckboxClicked" />

<CheckBox
    android:id="@+id/checkbox_cross_country"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button_record"
    android:layout_toRightOf="@id/checkbox_ifr"
    android:text="@string/checkbox_cross_country"
    android:onClick="crossCountryCheckboxClicked" />

<Spinner
    android:id="@+id/ifr_type_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/checkbox_ifr"
    android:visibility="gone" />

<TextView
    android:id="@+id/label_ifr_approaches"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/ifr_type_spinner"
    android:hint="@string/ifr_landings_label"
    android:visibility="gone" />

<logbook.app.custom.widgets.NumberSelector
    android:id="@+id/ifr_landings_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/label_ifr_approaches"
    android:visibility="gone"
    custom:orientation="vertical" />

<EditText
    android:id="@+id/ifr_hours"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/ifr_landings_selector"
    android:hint="@string/ifr_hours_hint"
    android:inputType="number"
    android:visibility="gone" />

<EditText
    android:id="@+id/cross_country_hours"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/ifr_hours"
    android:hint="@string/cross_country_hours_hint"
    android:inputType="number"
    android:visibility="gone" />

<TextView
    android:id="@+id/label_takeoffs_landings"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/cross_country_hours"
    android:hint="@string/takeoffs_landings_label" />

<logbook.app.custom.widgets.NumberSelector
    android:id="@+id/landings_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/label_takeoffs_landings"
    custom:orientation="horizontal" />

<Button
    android:id="@+id/button_create_log"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/landings_selector"
    android:onClick="createLog"
    android:padding="5dp"
    android:text="@string/button_create_log" />

</RelativeLayout>
</ScrollView>
</LinearLayout>

我想你想在新的可视视图下滚动滚动条
crossCountryHoursTextBox
为此,只需像这样滚动滚动滚动条

// scrollview at visible textbox
yourscroll.smoothScrollBy(0,crossCountryHoursTextBox.getTop()); 

这没用。同样的行为仍然存在。现在将android:fillViewPort=“true”添加到滚动视图标记仍然没有进展。为了清楚起见,我在
ScrollView
元素中添加了
android:fillViewport=“true”
。我已经从布局文件中删除了所有的
android:visibility=“gone”
。我已将
ScrollView
上的
android:layout\u height=“fill\u parent”更改为
android:layout\u height=“wrap\u content”`查看我的答案,你可以看到更改。我只是尝试了线性布局和垂直方向,效果很好!正如我之前所说,我想让它与一个相对论者一起工作,所以我将等待你的解决方案。谢谢你的帮助。你说现在不应用可见性是什么意思?从你的xml文件中删除它,android:visibility=“gone”我已经从布局文件中删除了所有的“android:visibility=“gone”,并使用了你提供的布局文件,但同样的情况也发生了。此外,我需要在屏幕加载时隐藏某些视图,这就是为什么我在XML文件中有“android:visibility=“gone”。好的,现在将android:fillViewPort=“true”添加到滚动视图标记yaps中,我很抱歉出现这种情况,但是,仅供参考,我得到了解决方案。这就是我们的recyclerView xml中的android:DegenantFocusability=“BlocksDescents”
。这是我从你那里得到的