一、摘要
公司登录功能让实现弹出软键盘,布局滑动效果使得将登录按钮顶上去,网上查了很多资料,大部分都是添加adjustPan | stateVisible 的属性,但是问题是我的界面效果没什么效果,它只是弹出到输入框的底部,离想要的效果还有很大差异。也有的网友说直接用LinearLayout 的权重 + ScrollView 来实现,但是效果也是不太理想。
二、功能实现
实现登录页面软键盘顶起功能,主要用了:
1)ScrollView + LinearLayout 权重效果;
2)设置需要顶起的控件,然后计算向上滑动距离。
三、布局
主要实现:使用ScrollView 作为最外层的控件,在布局中使用LinearLayout 的权重效果进行界面的实现
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<RelativeLayout
android:id="@+id/rl_login_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_ffffff">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/login_bg"
android:fitsSystemWindows="true"
android:scaleType="fitCenter"></ImageView>
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingBottom="45dp"
android:paddingTop="80dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:scaleType="fitCenter"
android:src="@drawable/logo_shb" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingTop="70dp">
<android.support.design.widget.TabLayout
android:id="@+id/tl_login_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="27dp"
android:layout_marginRight="27dp"
app:tabGravity="fill"
app:tabIndicatorColor="@color/blue_01e2e6"
app:tabIndicatorHeight="2dp"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/blue_01e2e6"
app:tabTextAppearance="@style/CustomTabTextAppearanceStyle"
app:tabTextColor="@color/gray_666666"
app:theme="@style/Widget.Design.TabLayout">
<android.support.design.widget.TabItem
android:id="@+id/tabitem_commen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none"
android:text="@string/login_convinent" />
<android.support.design.widget.TabItem
android:id="@+id/tabitem_convinent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none"
android:text="@string/login_commen" />
</android.support.design.widget.TabLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:id="@+id/vp_login"
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_marginTop="20dp"></android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="270dp"
android:orientation="horizontal"></LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_back"
android:layout_width="30dp"
android:layout_height="62dp">
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="32dp"
android:src="@drawable/back_white" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
四、实现软键盘弹出布局的滑动
测量软键盘弹出的时候布局滑动的距离。
LayoutUtil.controlKeyboardLayout(rlLoginBg, llEmpty);public class LayoutUtil {
public static void controlKeyboardLayout(final View root, final View scrollToView) {
root.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
root.getWindowVisibleDisplayFrame(rect);
int rootInvisibleHeight = root.getRootView()
.getHeight() - rect.bottom;
if (rootInvisibleHeight > 100) {
int[] location = new int[2];
scrollToView.getLocationInWindow(location);
int srollHeight = (location[1] + scrollToView
.getHeight()) - rect.bottom;
root.scrollTo(0, srollHeight);
} else {
root.scrollTo(0, 0);
}
}
});
}
}
五、总结
目前我的界面软件顶起登录按钮用这种方式实现了,缺少一个点都无法实现,布局顶起的效果是实现了,但是目前我的登录有快捷登录效果,验证码倒计时存在界面闪动问题,目前还在解决中,希望哪位有好的解决方法可以分享下。
本文介绍了在Android应用中,如何实现登录页面在软键盘弹出时,布局自动滑动并将登录按钮顶起的效果。通过使用ScrollView结合LinearLayout权重,以及计算并调整需要顶起的控件位置,成功实现布局滑动。但目前仍面临快捷登录和验证码倒计时导致的界面闪动问题,寻求解决方案。
1287

被折叠的 条评论
为什么被折叠?



