gpt4 book ai didi

android - 如果软键盘可见,ScrollView 不会滚动

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:10 27 4
gpt4 key购买 nike

我正在为登录屏幕使用一个简单的布局,其中包含顶部的栏和用户登录或转到注册 Activity 所需的项目。

在出现虚拟键盘之前,所有元素都很好地适合屏幕。 Android 软键盘遮挡了部分表单,我想使用 ScrollView,以便用户可以滚动并能够看到所有元素。

但是,即使使用 ScrollView,我也无法滚动查看页面底部:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFCB05"
android:orientation="vertical"
android:isScrollContainer="true"
android:gravity="top" >

<include
android:id="@+id/include1"
android:layout_width="fill_parent"
android:layout_height="50dip"
layout="@layout/actionbar_layout" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
android:gravity="center_vertical"
android:layout_below="@+id/include1"
>



<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/usuario"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#000000" />

<EditText
android:id="@+id/txtUsuario"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="5dp"
android:ems="10"
android:hint="@string/usuario" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="15dip" >

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/senha"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#000000" />

<EditText
android:id="@+id/txtSenha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:layout_centerVertical="true"
android:layout_marginTop="5dip"
android:ems="10"
android:hint="@string/senha"
android:inputType="textPassword" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="right" >

<Button
android:id="@+id/logarBtn"
android:layout_width="93dp"
android:layout_height="wrap_content"
android:layout_marginRight="30dip"
android:layout_marginTop="15dip"
android:layout_marginBottom="15dip"
android:text="@string/logar" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal" >

<TextView
android:id="@+id/registerBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/logarBtn"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dip"
android:layout_marginBottom="60dip"
android:linksClickable="true"
android:text="@string/cadastrar"
android:textColor="#0000CC"
android:textSize="18dp" />
</LinearLayout>

</LinearLayout>

</RelativeLayout>
</ScrollView>

我想我可以这样做:Android Soft Keyboard Obscures EditTexts in ScrollView但这似乎不是最佳做法。

有谁知道有更好的方法让它正确滚动吗?

最佳答案

public class CustomScrollView extends ScrollView {

private int scrollOffset = 0;

public CustomScrollView (final Context context, final AttributeSet attrs) {
super(context, attrs);
}

public void setScrollOffset (final int scrollOffset) {
this.scrollOffset = scrollOffset;
}

@Override
protected int computeScrollDeltaToGetChildRectOnScreen (final Rect rect) {
// adjust by scroll offset
int scrollDelta = super.computeScrollDeltaToGetChildRectOnScreen(rect);
int newScrollDelta = (int) Math.signum(scrollDelta) * (scrollDelta + this.scrollOffset);
return newScrollDelta;
}
}

使用此自定义 ScrollView 代替普通 ScrollView 。更改 scrollOffset 的值以获得所需的结果(scrollOffset = 10 意味着当软键盘打开时将额外向下滚动 10dp)确保在 Activity 中添加 android:windowSoftInputMode="adjustResize"

关于android - 如果软键盘可见,ScrollView 不会滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com