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