我在 Android 中构建登录页面时遇到问题。我想将用户名和登录名保留在布局的底部。但是,当输入用户名/密码时,键盘会弹出,并且我的背景图像也会随之滑动。我希望我的背景图像应该是静态的,只有我的登录布局应该在键盘弹出时向上滑动。我在活动内添加了带有登录布局的片段,并在活动布局中添加了背景图像。
这是我的片段和活动布局代码:
fragment_login.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal">
<RelativeLayout android:id="@+id/login_form" android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout android:id="@+id/username_login_form" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="vertical">
<com.test.views.CustomEditText android:id="@+id/usernameview" android:layout_width="@dimen/login_edittext_width" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="12dp" android:gravity="center_horizontal"
android:hint="@string/prompt_username" android:imeOptions="actionNext" android:inputType="text|textPersonName|textFilter|textNoSuggestions" android:maxLines="1" android:padding="16dp" android:paddingLeft="5dip" android:scrollHorizontally="true"
android:singleLine="true" android:textColor="@android:color/white" android:textColorHint="@android:color/white" android:textSize="16sp" />
<com.test.views.CustomEditText android:id="@+id/password" android:layout_width="@dimen/login_edittext_width" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="8dp" android:gravity="center_horizontal"
android:hint="@string/prompt_password" android:imeOptions="actionNext" android:inputType="textPassword" android:maxLines="1" android:padding="16dp" android:singleLine="true" android:textColor="@android:color/white" android:textColorHint="@android:color/white"
android:textSize="16sp" />
<Button android:id="@+id/sign_in_button" android:layout_width="@dimen/login_button_width" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="8dp" android:background="@drawable/blue_btn_selector" android:imeOptions="actionDone"
android:paddingLeft="26dp" android:paddingRight="26dp" android:text="@string/sign_in" android:textColor="@android:color/white" android:textSize="@dimen/signin_button_textsize" android:textStyle="bold" />
<TextView android:id="@+id/forgot_password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/forgot_password" android:textColor="@android:color/white" android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/username_login_form" android:layout_centerHorizontal="true" android:layout_marginBottom="25dp" android:text="text" android:textColor="@android:color/white"
android:textSize="42sp" />
</RelativeLayout>
<!-- Login progress -->
<ProgressBar android:id="@+id/login_progress" style="?android:attr/progressBarStyleLargeInverse" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginBottom="8dp" android:visibility="gone"
/>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/login_background" android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.test.activity.LoginActivity">
<FrameLayout android:id="@+id/fragment_layout" android:layout_width="match_parent" android:layout_height="match_parent" />
</RelativeLayout>
您必须将背景设置为窗口而不是布局,以便它不依赖于布局更改。示例;
getActivity().getWindow().setBackgroundDrawableResource(yourBackgroundid);
在某些设备上,上面的代码不会起作用,所以你必须这样做。
getActivity().getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
getActivity().getWindow().setBackgroundDrawableResource(yourBackgroundid);
在 Java 代码中使用以下代码:
getActivity().getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.imagename));
并在 AndroidManifest.xml 中添加以下代码到您的活动中:
android:windowSoftInputMode="adjustResize"
对我来说,只有下面的代码解决了问题,关闭了监听器键盘:
ScrollView myScroll = findViewById(R.id.scroll1a); myScroll.requestLayout();