I have a ScrollView
with a RelativeLayout
inside it. This RelativeLayout
then has several View
s inside it. One of these several View
s is a CheckBox
. When the CheckBox
is checked/unchecked, some of the other View
s should appear/disappear accordingly.The appearing and disappear is working fine, but every time the target View
s appear or disappear, the ScrollView
scrolls all the way to the top and I'm forced to scroll down to see what happened.
The code I use to control visibility is:
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);
}
}
and the crossCountryCheckboxClicked()
method is called by specifying the android:onClick
attribute on the CheckBox
element in the XML layout file.
Here is the XML layout file:
<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>
How can I stop the ScrollView
from scrolling to the top every time one of its children's visibilities is changed between View.GONE
and View.Visible
?
fillViewport allows scrollView to extend it's height equals to the full height of device screen's height in the cases when the child of scroll view has less height.
A ScrollView supports Vertical scrolling only, so in order to create a horizontally scrollable view, HorizontalScrollView is used.
ScrollView is used to put different or same child views or layouts and the all can be scrolled. ListView is used to put same child view or layout as multiple items. All these items are also scrollable. Simply ScrollView is for both homogeneous and heterogeneous collection.
I think you want to scrolldown you scrollbar at new visible view crossCountryHoursTextBox
for that just scroll your scrollbar like this
// scrollview at visible textbox
yourscroll.smoothScrollBy(0,crossCountryHoursTextBox.getTop());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With