Hide and show keyboard with insets controller
This commit is contained in:
1 parent
d8264ad0d7
commit
d48919a5c3
5 files changed
+46
-22
No files matched your search
@@ -56,14 +56,22 @@ public class WindowInsetsAnimationHelper extends WindowInsetsAnimationCompat.Cal
|
||||
if (animation == null) {
|
||||
return insets;
|
||||
}
|
||||
for (View view : views) {
|
||||
if (view == null) {
|
||||
continue;
|
||||
WindowInsetsAnimationCompat imeAnimation = null;
|
||||
for (WindowInsetsAnimationCompat animation : runningAnimations) {
|
||||
if ((animation.getTypeMask() & WindowInsetsCompat.Type.ime()) != 0) {
|
||||
imeAnimation = animation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (imeAnimation != null) {
|
||||
for (View view : views) {
|
||||
if (view == null) {
|
||||
continue;
|
||||
}
|
||||
int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
|
||||
int endPadding = endPaddings.containsKey(view) ? endPaddings.get(view) : 0;
|
||||
view.setTranslationY(MathUtils.lerp(endPadding - startPadding, 0, animation.getInterpolatedFraction()));
|
||||
}
|
||||
int startPadding = startPaddings.containsKey(view) ? startPaddings.get(view) : 0;
|
||||
int endPadding = endPaddings.containsKey(view) ? endPaddings.get(view) : 0;
|
||||
int offset = MathUtils.lerp(-(startPadding - endPadding), 0, animation.getInterpolatedFraction());
|
||||
view.setTranslationY(offset);
|
||||
}
|
||||
return insets;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.core.view.WindowInsetsControllerCompat;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
@@ -185,9 +186,7 @@ public abstract class BaseScene extends SceneFragment {
|
||||
}
|
||||
|
||||
public void setLightStatusBar(boolean set) {
|
||||
if (insetsController == null) {
|
||||
insetsController = ViewCompat.getWindowInsetsController(requireActivity().getWindow().getDecorView());
|
||||
}
|
||||
var insetsController = getInsetsController();
|
||||
if (insetsController != null) {
|
||||
insetsController.setAppearanceLightStatusBars(set && (requireActivity().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) <= 0);
|
||||
}
|
||||
@@ -222,7 +221,7 @@ public abstract class BaseScene extends SceneFragment {
|
||||
setNavCheckedItem(getNavCheckedItem());
|
||||
|
||||
// Hide soft ime
|
||||
AppHelper.hideSoftInput(getActivity());
|
||||
hideSoftInput();
|
||||
setLightStatusBar(needWhiteStatusBar);
|
||||
}
|
||||
|
||||
@@ -247,25 +246,46 @@ public abstract class BaseScene extends SceneFragment {
|
||||
}
|
||||
|
||||
public void hideSoftInput() {
|
||||
FragmentActivity activity = getActivity();
|
||||
if (null != activity) {
|
||||
AppHelper.hideSoftInput(activity);
|
||||
var insetsController = getInsetsController();
|
||||
if (insetsController != null) {
|
||||
insetsController.hide(WindowInsetsCompat.Type.ime());
|
||||
}
|
||||
}
|
||||
|
||||
public void showSoftInput(@Nullable View view) {
|
||||
FragmentActivity activity = getActivity();
|
||||
if (null != activity && null != view) {
|
||||
AppHelper.showSoftInput(activity, view);
|
||||
if (view != null) {
|
||||
view.requestFocus();
|
||||
view.post(() -> {
|
||||
var insetsController = getInsetsController();
|
||||
if (insetsController != null) {
|
||||
insetsController.show(WindowInsetsCompat.Type.ime());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public WindowInsetsControllerCompat getInsetsController() {
|
||||
if (insetsController == null) {
|
||||
var activity = getActivity();
|
||||
if (activity != null) {
|
||||
insetsController = ViewCompat.getWindowInsetsController(activity.getWindow().getDecorView());
|
||||
}
|
||||
}
|
||||
return insetsController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
Analytics.onSceneView(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
insetsController = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
|
||||
@@ -75,7 +75,6 @@ import com.hippo.ehviewer.widget.GalleryInfoContentHelper;
|
||||
import com.hippo.ehviewer.widget.SearchBar;
|
||||
import com.hippo.scene.Announcer;
|
||||
import com.hippo.scene.SceneFragment;
|
||||
import com.hippo.util.AppHelper;
|
||||
import com.hippo.widget.ContentLayout;
|
||||
import com.hippo.widget.FabLayout;
|
||||
import com.hippo.widget.SearchBarMover;
|
||||
@@ -721,7 +720,6 @@ public class FavoritesScene extends BaseScene implements
|
||||
}
|
||||
builder.setError(null);
|
||||
mHelper.goTo(goTo);
|
||||
AppHelper.hideSoftInput(dialog);
|
||||
dialog.dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -104,7 +104,6 @@ import com.hippo.ehviewer.widget.SearchBar;
|
||||
import com.hippo.ehviewer.widget.SearchLayout;
|
||||
import com.hippo.scene.Announcer;
|
||||
import com.hippo.scene.SceneFragment;
|
||||
import com.hippo.util.AppHelper;
|
||||
import com.hippo.util.ExceptionUtils;
|
||||
import com.hippo.view.BringOutTransition;
|
||||
import com.hippo.view.ViewTransition;
|
||||
@@ -963,7 +962,6 @@ public final class GalleryListScene extends BaseScene
|
||||
}
|
||||
builder.setError(null);
|
||||
mHelper.goTo(goTo);
|
||||
AppHelper.hideSoftInput(dialog);
|
||||
dialog.dismiss();
|
||||
});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user