fillviewport color android scroll scrollview visibility

color - Android ScrollView se desplaza hacia arriba después de llamar a setVisibility(View.VISIBLE) en la vista infantil



scrollview android (2)

Prueba esto:

<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>

Tengo un ScrollView con un RelativeLayout dentro. Este RelativeLayout tiene varias View dentro de él. Una de estas varias View es una CheckBox . Cuando la CheckBox verificación está marcada / desmarcada, algunas de las otras View deben aparecer / desaparecer en consecuencia. La aparición y la desaparición funcionan bien, pero cada vez que las View destino aparecen o desaparecen, ScrollView desplaza hasta la parte superior y yo Me veo obligado a desplazarme hacia abajo para ver qué pasó.

El código que utilizo para controlar la visibilidad es:

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); } }

y se llama al método crossCountryCheckboxClicked() al especificar el atributo android:onClick en el elemento CheckBox en el archivo de diseño XML.

Aquí está el archivo de diseño 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>

¿Cómo puedo evitar que ScrollView desplace hacia la parte superior cada vez que una de las visibilidades de sus hijos cambie entre View.GONE y View.Visible ?


Creo que quieres desplazarte hacia abajo en la barra de desplazamiento en la nueva vista visible crossCountryHoursTextBox para eso simplemente desplaza la barra de desplazamiento como esta

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