我想创建一个登录页面,但我遇到了问题。我希望即使软键盘可见,登录按钮也始终可见。请参阅附图。
这是一个普通的登录页面。我使用CoordinatorLayout
,AppBarLayout
和扩展高度Toolbar
。
正如您在屏幕截图中看到的那样,该页面是可滚动的。我有NestedScrollView
,我使用app:layout_behavior="@string/appbar_scrolling_view_behavior"
。
问题是如果打开软键盘,则会隐藏登录按钮。我希望登录按钮位于键盘的顶部。我使用了isScrollContainer
和windowSoftInputMode
设置但我无法设置所需的行为。
如果有帮助,这是我的xml内容。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="196dp"
android:background="?attr/colorPrimary"
android:gravity="bottom"
android:minHeight="?attr/actionBarSize"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="textEmailAddress"
android:minHeight="48dp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom|end">
<Button
android:id="@+id/btnSignIn"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign In"
android:textColor="?attr/colorPrimary" />
</LinearLayout>
</RelativeLayout>
在AndroidManifest.xml中:
<activity android:name=".activities.authentication.SignInActivity"
android:theme="@style/RegistrationTheme"
android:windowSoftInputMode="adjustResize"
android:label="Sign In" />
你能帮我解决这个问题吗?
我的设备是 HTC Sensation ,其中包含 Android 5.0.2(CyanogenMod 12)
答案 0 :(得分:1)
在AndroidManifest.xml中找到您的活动并为keyboardInputMode添加属性: 它看起来像是
<activity
android:name=".LoginActivity"
android:windowSoftInputMode="adjustResize" />
必须帮助你
答案 1 :(得分:0)
最后,我找到了解决问题的正确方法。
android:windowSoftInputMode="adjustResize"
我使用的android:isScrollContainer="true"
代表基本相同的CoordinatorLayout
。CoordinatorLayout
是FrameLayout
,我们可以使用android:layout_gravity
属性更轻松地对齐事物。AppBarLayout
&#39; s Behavior
。默认Behavior
检查滚动视图是否足够大以滚动。但是如果打开键盘那就错了。所以我修改它以返回始终为真。通过这种方式,即使键盘可见,滚动也能正常工作。我的自定义Behavior
public class MyBehavior extends AppBarLayout.Behavior {
public MyBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes) {
super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes);
return true;
}
}
在布局xml中,您可以为layout_behavior
AppBarLayout
app:layout_behavior="com.your.package.MyBehavior"
布局xml的全部内容
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:isScrollContainer="true">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="56dp">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Username"
android:inputType="textEmailAddress"
android:minHeight="48dp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="168dp"
android:background="?attr/colorPrimary"
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_behavior="com.your.package.MyBehavior">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
app:expandedTitleMarginStart="16dp"
app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<Button
android:id="@+id/btnSignIn"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:text="Sign In"
android:textColor="?attr/colorPrimary" />
</android.support.design.widget.CoordinatorLayout>
通过这种方式,一切都按预期工作。您有一个可滚动的页面,其中登录按钮(或页脚)始终可见。