AdjustPan Android doesn't behave as I would expect - android

From what I could understand of the difference between AdjustResize and Adjust pan, it's that AdjustResize will change the height of all the components so that they can fit and squeeze into a "half screen" while AdjustPan will, only in the case where a view below the keyboard takes the focus, bring up this particular view so that it is accessible despite the keyboard.
However, in my case, I have a comment section which is a React Navigation view. In this view, I have a TextInput below it that must go up when the keyboard opens to write a comment. But when this TextInput goes up, it takes everything with it, including the elements of the previous view in the stack.
Picture from comment section (The gray above the keyboard is the textinput)
Picture from previous view in the stack if I go back (Only until the keyboard didblur event is sent and then everything returns to normal)
Why does the adjustPan seem to behave a bit like AdjustResize?
I've already tried to set AdjustNothing, but unfortunately it can't work because I don't receive keyboard events anymore.

I finally figured out where the problem was coming from.
I use
<SafeAreaInsetContext>
from the react-native-safe-area-context library because I need to do special management of the insets bottom for devices like iPhoneX or iPhone 11.
And in fact, when the Android keyboard opens, the insetBottom is redefined to take the keyboard size as well. So I had a padding on the bottom of my screen that was the size of my keyboard as soon as it opened. So the behavior is normal, and after correction, my AdjustPan behaves exactly as it should !

Related

Android | How to hide BottomNavigation even if windowSoftInputMode is set to 'adjustResize'?

I have an activity with BottomNavigation. If the user needs to click on the submit button soft keyboard hides it. Then he again needs to press the back button to see the submit button. In this case, I used windowSoftInputMode='adjustResize' so that the screen gets resized automatically and the user can scroll up and click on the submit button.
But, I have BottomNavigation too, windowSoftInputMode='adjustResize' makes BottomNavigation float above the soft keyboard. Can anyone suggest a better solution? Any help will be appreciated. Thanks
Thats tricky issue... You have two options in here:
Keep 'adjustResize' and hide BottomNavigation view when keyboard pops up (e.g. simply setVisiblity?)
Change to e.g. 'adjustPan' (or any other) preventing keyboard resizing app and add bottom padding with height of keyboard for whole content container. BottomNavigation will stay hidden under keyboard, but padding will allow scrolling to Submit button
In both cases you need to detect open/close keyboard, in second case you will also need keyboard height measuring. IN HERE and HERE you have big SO topics about this case, check out answers and comments, and pick proper resolution for your purposes

How to make in app custom keyboard behave like a system keyboard?

I have an in app keyboard that tries to behave like a system keyboard. So far it pops up from the bottom using Bottom Sheet, which is great.
However, unlike a system keyboard, it does not push the entire layout up when you select an EditText that might otherwise get hidden. So far all the solutions I saw on StackOverFlow seem to be about Soft/System Keyboard not an in-app implementation like mine.
Here is my activity with 3 Edit Texts
This is what happens if I click on the last Edit Text. It gets covered by the keyboard in blue
This is how I want it to be. Everything getting pushed up.
How can I achieve this?

How can I cause editing of EditText to happen in full screen mode?

As shown in the landscape images here: http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html .
I don't necessarily need to do the fullscreen thing, but my issue is that the EditText is below the soft keyboard and I cant figure out how to get the whole thing to display above it. Its a note field, and fills whatever open space there is from the end of my other fields to the bottom of the screen. Currently when I select the note, the screen moves up just enough to see the top of the note field, but this is not good enough. I want the top of the note field to move up to the top of the screen, to maximize what the user sees while they are editing the field.
My softInputMode in the manifest is adjustPan, but changing these settings has not done anything for me.
You need to add a ScrollView around the view to make it slide and change adjustPan to adjustResize (adjustPan is normally not recommended) to the activity on the manifest.

detect soft keyboard being hidden

i have an activity with an edit box, when the user touches inside the edit box, the soft keyboard comes up. if the user presses the hardware "back" button, the soft keyboard goes away. I want to detect this situation. I have looked around and the best response i've seen so far is this one:
http://groups.google.com/group/android-developers/browse_thread/thread/9d1681a01f05e782
my question is -- how can you detect if your application window has been resized?
I added this text to my activities in my android manifest file:
android:windowSoftInputMode="adjustResize"
but I'm not quite sure how to detect the change.
any help greatly appreciated.
Android does not provide an API for checking if the keyboard is visible or not. You can, however, key off the height of your top level layout to determine this information.
First, you have to set your activity's android:windowSoftInputMode attribute to "adjustResize".
Then, create a new class that extends your desired layout type (eg LinearLayout). In that class, you can override a few different methods that will be called as the height of your layout changes (due to the keyboard being shown or hidden). When these calls are triggered, you can compare the height of your layout to the height of the screen. If there's a substantial difference between the two (ie more than just the size of the notification bar), the keyboard is visible.
Finally, make sure that you use your new class as the top level layout in your layout xml (eg in place of LinearLayout).
If you would like a more thorough explanation, I've written one up: http://www.cannedcoding.com/2011/08/soft-keyboard.html
Creating an Input Method Service (See http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html) to listen for the back button might work. When it is pressed, you can pass that on to your activity which then does what you want it to do along with removing the soft keyboard.

Get soft keypad to stop modifying my LinearLayout on display?

In my android application, I have an EditText. When I click in this field, the soft keyboard appears, expanding from the bottom of the screen. It seems to actually modify my layout, pushing contents upwards. When I dismiss the keypad, it retracts, and I see my layout re-expand to take up the space it previously occupied.
Is there a way to get the keyboard to simply appear "on top" of my layout, so that I don't get this somewhat unpleasant relayout animation? The EditText is pinned to the very top of the screen, so I don't have to worry about the keypad hiding it.
Thanks
By default, Android should be using "Pan and Scan", which would work more or less how you described. The keyboard is displayed over your view, and you can scroll your view in the background. If you override the windowInputMode for you Activity, or Android determines that your Activity is resizable (because of the presence of a resizable field... ListView, ScrollViews, etc), it may resize your view instead, and it sounds like that's what you're running into. To force it to Pan and Scan try adding:
android:windowSoftInputMode="adjustPan"
as an attribute to the Activity element in your xml layout.
There's a third option as well. You can specify that when an EditText is selected it will be edited in full screen mode. The other controls in your view will be hidden, the user will be presented with just the keyboard, an EditText control, and optionally some other limited controls. If your EditText doesn't require a lot of context from other elements of your view, it may prevent a cleaner user interface. For more details, see: http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html
Add:
android:windowSoftInputMode="adjustResize"
to your activity attr in manifest.xml. Hope it will help.
This questions seems to state a resize is not desirable. I had the same issue, but adding
android:windowSoftInputMode="adjustNothing"
to the manifest file instead solved my problem.

Categories

Resources