Why, when using ViewPager2, the software keyboard hides the edittext and raises the floating button? - android

Why, when using ViewPager2, the software keyboard hides the EditText and raises the floating button? When using ViewPager, everything is done the other way around. Hides the floating button and leaves the EditText visible.
This is ViewPager. All is right. Floating Button is hidden. EditText is visible.
And this is ViewPager2. I've only replaced ViewPager with ViewPager2. And FragmentPagerAdapter with FragmentStateAdapter.
I'm sure it shouldn't be like that.
I also replaced tabs.setupWithViewPager(viewPager)
with this one:
TabLayoutMediator(binding.tabs, binding.viewPager) { tab, position ->
tab.text = resources.getString(TAB_TITLES[position])
}.attach()
How to make it so that when using ViewPager2, the software keyboard behaves the same way as when using ViewPager?

Related

Programmatically scroll FAB back in

I am using coordinator layout with tabs, some of which (the tabs) contain a recycler view whilst some don't. All the tabs contain a floating action button. On scrolling the recycler view with the in one of the tabs, the floating action button is scrolled off by the coordinator layout. However, when I switch to the tab without the recycler view, and not being able to scroll, the tab remains scrolled off the screen (as it was done in the tab with a recycler).
How do I bring back the floating action button back when there is no way of scrolling in the tab without the recycler or any scroll mechanism?
Turned out to be a simply solution of translating the fab back in. floatingActionButton.setTranslationY(0.0f);

Only adjust child fragment when soft keyboard is up

My app is based on the single activity architecture, and I have a parent fragment inside the activity which has a navigation bar at the bottom and a frame layout on which I place other child fragments.
One of the child fragments has an EditText at the bottom, but when the soft-keyboard is up, I want that the view is only adjusted of the child fragment.
I have already tried adjust pan or resize options but nothing is working for this specific use case.
When I use the following code, it adjusts the EditText but the bottom bar of the parent fragment also goes up when keyboard is shown, which is not what I am trying to do.
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN or WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
Any help will be appreciated.

Move the Floating Action Button along with the swiped tab

Let me brief about my idea and what I'm aiming to achieve,
Idea is to have a swipe tab with three tabs in it and each tab screen being represented by a seperate Fragment class. I did this using the "it.neokree:MaterialTabs:0.11" library and everything is working well.
Then I created a floating action button (FAB) using the "com.oguzdev:CircularFloatingActionMenu:1.0.2" library.
Now what I'm trying to achieve is to fix this FAB to the fragment in the center tab and when I swipe the screen to go the previous or the next tab the FAB should slide out along with the tab fragment its in and should slide back in along with the center tab screen when I swipe back to it.
I have worked on it till now and now I'm able hide the view in other fragments and show it again in the center fragment by overriding the setUserVisibleHint() method in each fragment class like this.
#Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
View tempView = getActivity().findViewById(R.id.myFAB);
tempView.setVisibility(View.INVISIBLE);
}
}
But the problem is I want the FAB to slide out and in along with the center tab just like other views in the tab's fragment class does, but my FAB is simply vanishing and reappearring.
In a way I want the FAB to be exclusive to the center tab and should be fixed to it.
I also tried defining the FAB inside the center Fragment class but it doesn't seem to make any difference. Any Advice and suggestion will be very helpful. Thanks in advance
This library adds it's view to the 'android.R.id.content' ViewGroup. That's why it doesn't matter, where you define it.
Animating such view may be difficult, but should be possible. You have translate the FAB while swiping the pager manually.
By the way, Google recommends to hide the FAB, not swipe:
For tabbed screens, the floating action button should not exit the
screen in the same direction as the screen exits. Doing so creates
visual noise. It would also cause a nonfunctional floating action
button to appear on screen. Furthermore, it incorrectly implies that
the floating action button is at the same the z-level as the content,
rather than at the level of the primary UI elements at the root
level.
See: http://www.google.com/design/spec/components/buttons-floating-action-button.html#buttons-floating-action-button-behavior
If you want to show the FloatingActionButton only in the middle/single tab, then you can add the FAB in the Fragment instead of adding it in Activity in which all the Fragments are added.

Adding a fragment on top of another fragment and clear focus of bottom fragment

I have created one fragment from the activity. After that I have added another fragment top of the previous fragment. I have added Android: clickable="true" in my top fragment so that I can grab the click event. Everything is working fine. Now I am trying to implement the external Keyboard navigation and found that bottom fragment still grab the focus.
I have tried different ways to clear the focus of bottom fragment when I am in the top fragment. But could not find a solution.
I solved the issue. I just invisible the bottom fragment from the top using findFragmentBytag to find the bottom fragment.
Example code segment:
Fragment bottom = ( Fragment) getFragmentManager().findFragmentByTag(bottom.TAG);
if (bottom.isVisible()) {
bottom.getView().setVisibility(View.INVISIBLE);
}

[Android]How to disable page horizontal move along drag in ViewPager?

I have a ViewPager with a FragmentPageAdapter set for it.
And the ViewPager is show some simple fragment.
I am able to use ViewPager for swipe between fragments.
However, I don't like the scrolling effect of ViewPager that showing partial content of next fragment while swiping/dragging current fragment.
Instead, I would like to switch to next fragment at instant with swipe(but without scrolling effect) and show fragment immediately.
How can I do such thing(must use ViewPagger)?
You have to implement your own "SwipeDetector" and use mViewPager.setCurrentItem(index, false) method (second parameter indicates whether to enable animation or not).

Categories

Resources