Keep bottom content scrollview visible when soft keyboard is displayed - android

I have a ScrollView that I am trying to use to replicate the accepted behavior of a text messaging app. When the ScrollView is first loaded, I scroll to the bottom. And when the soft keyboard is brought up, the ScrollView adjusts its height to compensate. But when the height of the ScrollView is reduced, the bottom contents are hidden, instead of the top contents. I would like for the contents to be pushed up as the size is reduced.
Now I could scroll to the bottom as soon as the ScrollView is re-sized, but what if the ScrollView is not already scrolled to the bottom? Essentially, I want to keep the last visible text message that the user is looking at visible, regardless if it is at the bottom of the ScrollView or not.
I've also tried using the ADJUST_PAN layout parameter, but I don't want my whole window panned up. But if there is an analogous ScrollView behavior, that is exactly what I'm looking for.

Related

How to prevent soft keyboard from blocking bottom action buttons while not reducing scroll view area?

My current view consists of a scroll view, and a bottom action button area. The bottom action buttons are always visible regardless of how many fields I have inside the scroll view:
Problem is, when windowSoftInputMode is adjustResize, the bottom action button area gets pushed up and the scroll view becomes really small and only two fields are visible at a time, plus it is hard to scroll up and down to see all the other fields as the area is so small, it does have one advantage where the bottom action buttons were not blocked by the soft keyboard:
I tried changing windowSoftInputMode to adjustPan, it pans to where the input focus is, which is pretty neat, however the problem is now the bottom action buttons are blocked by the soft keyboard, no matter how much I tried to scroll down:
How to make it so that when the soft keyboard is shown, the scroll view area still remains the same, but when I scroll to the bottom of the scroll view, I am able to continue scrolling until the bottom action buttons can be accessed, without dismissing the soft keyboard?

How can I disable ScrollView scrolling if it's not needed?

My UI consists of a ScrollView that takes the top 50% of the screen and under that two buttons that are attached to the bottom of the screen; YES and NO. The content of Scrollview is text that for most phones does not fill up the visual area of the ScrollView. However sometimes the text can be longer, such that it fills beyond the visual area of the ScrollView, hence the reason I added the ScrollView.
My problem is this; even when the ScrollView has very little text and does not need to scroll to show all of its content it still scrolls. The user can scroll the content up a slight amount. I'd like the View to instead not allow any scrolling if all the content is visible.
Is there an easy way to achieve this? Or do I have to implement that myself?
You cannot disable the scrolling of a ScrollView. You would need to extend to ScrollView and override the onTouchEvent method to return false when some condition is matched. To get help with extending, please read the answers to Disable ScrollView Programmatically?

ScrollView still scrolling with hidden contents

I have a ScrollView with a RelativeView beneath it. Within that RelativeView, there are 3 views in it. 2 of those 3 are initially hidden.
Even though on my phone the scroller_rel doesn't take up the whole screen, I can still scroll through as if scroller_rel2 and scroller_rel3 are there and not hidden.
Programmatically I will decide if scroller_rel2 and scroller_rel3 are hidden or visible, and I'm wondering how to also then decide if we should be able to scroll or not.
The easy way to ask this question is: How can I programmatically tell ScrollView the height of the visible contents, so that if the contents are not larger than the container, we disable scrolling, and if say 2 of the 3 are showing, how can we then enable scrolling only to the bottom of scroller_rel2?
The reason you're having this problem is because setting the view to be View.INVISIBLE does just that, but it still takes up space in your layout, so that's why you can still scroll. What you should be using is View.GONE, this actually sets the view to be invisible and it removes it from the layout. Check out the documentation here:
GONE
INVISIBLE

Android check either scrollview is scrollable or not

In my app I have a scroll view with n number of data to be listed out. There are two buttons one is named as UP placed above scroll view and the other is DOWN placed below scroll view.
Using the UP and DOWN buttons the list of views can be scrolled.
When the scroll bar is in top the Up button will be invisible and when the scroll bar reaches the bottom the DOWN button will become invisible, I have written logic for this using the getScrollX() method.
Now my problem is when there is very few data for example 3, the scroll bar will not be visible and the layout cannot be scrolled, in such a case both the UP and DOWN buttons need to be in invisible. How to do this, please suggest me a way?
You can try and use a ViewTreeObserver to check the dimension of the View inside your ScrollView. If the dimension exceeds a certain limit (such as the screen size), the ScrollView will be scrollable. See this preview SO answer for more details. Hope that helps!

Android ScrollView how to keep component on screen when it scroll to top of the screen?

I have a ScrollView layout like this, for example:
<ScrollView>
<Component1>
<Component2>
<Component3>
<Component4>
...
</ScrollView>
Inside ScrollView I have some components, each of them can be anything like LinearLayout, RelativeLayout, TableRow, ...
Now what I want is I will scroll the view, when the <Component2> reach the top of the screen, it will be keep on the screen and <Component3>, <Component4>... will keep scrolling till the end of page. When I scroll down, <Component2> will only be scrolled when all the <Component3> has became visible. I saw this on an Iphone app and wondered how to achieve this on Android.
I don't know if I describe clearly enough but it is same like this video
http://www.youtube.com/watch?v=jXCrM1rzLZY&feature=player_detailpage#t=71s
When the tabs scrolled up to top, it stay there. And when scrolled down like in 1:36 of that video, it stay there until all the content below has became visible on the screen.
Does anybody know how to do this on Android?
I guess you could create a hidden copy of Component2 in a RelativeLayout that is setVisible(true) when the coordinates of Component2 are lower(Android draws from the top) than the top of the ScrollView. When the coordinates of Component2 are higher than the top of the ScrollView (.getTop()), Component2Copy.setVisible(false).
You may also want to disable them when changing their visibility. Good luck with this.

Categories

Resources