Android Question [solved]Problem with scrollview length

mare1980k1

Member
Licensed User
Longtime User
I am trying to make my scrollview change length in the program. When I use:
B4X:
ScrollView1.Panel.Height
it doesn't have an influence on the length of the scrollable area. I am loading view panel1 that contains bunch of other views:
B4X:
ScrollView1.Panel.AddView(Panel1,0,0,GetDeviceLayoutValues.Width,1000dip)

With this:
B4X:
ScrollView1.Initialize(1000dip)
I can get it to scroll but not to change the length later in the code.
I tried this in the code:
B4X:
Panel1.Height=Button1.Top+15dip+110dip
   ScrollView1.Panel.Height=Panel1.Height
   ScrollView1.Height=ScrollView1.Panel.Height
Button1 is the last view that should be visible on the bottom of the scrollable area.
Later I realized that I can't do it like that
B4X:
ScrollView1.Height=ScrollView1.Panel.Height
because for some reason it returns wrong values.

When I made a test app and made the most simple thing it Toasted 450:
B4X:
#Region  Project Attributes
   #ApplicationLabel: B4A Example
   #VersionCode: 1
   #VersionName:
   'SupportedOrientations possible values: unspecified, landscape or portrait.
   #SupportedOrientations: unspecified
   #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
   #FullScreen: True
   #IncludeTitle: False
#End Region

Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.

   Private Panel1 As Panel
   Private ScrollView1 As ScrollView
   Private Button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   Activity.LoadLayout("Layout1")
   Activity.RemoveAllViews
   Activity.AddView(ScrollView1,0,0, GetDeviceLayoutValues.Width,GetDeviceLayoutValues.Height)
   ScrollView1.Panel.AddView(Panel1,0,0, GetDeviceLayoutValues.Width,1000dip)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
   ScrollView1.Panel.Height=300dip
   ScrollView1.Height=ScrollView1.Panel.Height
   ToastMessageShow(ScrollView1.Height,False)
End Sub
I think it can't be more simple than this. Either I am terribly wrong somewhere or there is a bug.
Thanks so much if you can help me :)
 

Attachments

  • Sample1.jpg
    Sample1.jpg
    142.7 KB · Views: 308
  • listtest.zip
    394.8 KB · Views: 347

mare1980k1

Member
Licensed User
Longtime User
I found the solution. It is the difference between pixels and dip-s. Anyway, you can't copy from one to another, but you can assign it every time with direct dip value.
 
Upvote 0

klaus

Expert
Licensed User
Longtime User
ScrollView1.Height=ScrollView1.Panel.Height
This looks strange to me!
Why do you set the ScrollView.Height equal to the internal Panel height.
First, nothing will scroll.
Second, if the internal Panel height is bigger than the screen height a part of the ScrollView will not be shown, because it's outsides the screen.
 
Upvote 0
Top