Android:如何在焦点上将ScrollView中的EditText放在另一个视图上方?

时间:2018-06-15 17:30:07

标签: android android-edittext scrollview

我的应用程序设计让我对每个表单视图都有这种布局:视图底部的浮动按钮。我使用ConstraintLayout动态设置按钮的高度,无论屏幕宽度如何,总是保持相同的左/右边距,因此我最终得到了这个布局:

<ConstraintLayout>
    <ScrollView>
        <EditText/>
        <EditText/>
        <!-- ... -->
        <ConstraintLayout /> (1)
    </ScrollView>
    <Button/>
</ConstraintLayout>

(1)带有底部按钮高度的清晰视图,以便不会隐藏滚动视图底部的视图,这些视图将被按钮隐藏

基本上,这就是它的样子:

enter image description here

现在我遇到的问题是当我点击底部的编辑文本时,例如这里是第4个:

enter image description here

编辑文本向上移动键盘,但不是浮动按钮,它经常被它隐藏。我知道我必须在编辑文本的onFocusChanged()方法中做一些事情,但我不知道是什么......

6 个答案:

答案 0 :(得分:3)

  

我知道我必须在编辑文本的onFocusChanged()中做一些事情   方法

没有。您不必手动执行操作。只需将此属性添加到按钮即可。这将使按钮位于父布局的底部,而不是位于EditText底部(如果已经这样做,可以跳过此步骤)。

app:layout_constraintBottom_toBottomOf="parent"

并将此属性添加到表示该特定活动的activity标记中。它会将可视区域的高度减少一个等于软键盘高度的量,使其不会落后于内容。

android:windowSoftInputMode="adjustResize"

有关详细说明,请参阅doc

另请注意,ScrollView只能托管一个直接子项,如下例所示。

<ScrollView
    ...>
    <LinearLayout
    ...>
       <!-- You can place multiple views here -->
    </LinearLayout>
</ScrollView>

答案 1 :(得分:1)

1-当您将焦点更改为true时,您可以将编辑文本移动到scrollView的顶部:

这是代码:

java代码:

ID   DATE   desc 

我的XML:

    LinearLayout containerOfScrollViewViews= findViewById(R.id.containerOfScrollViewViews);

        for (int i = 0; i < containerOfScrollViewViews.getChildCount(); i++) {

            containerOfScrollViewViews.getChildAt(i).setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {

                    int[] xy = new int[2];
                    v.getLocationInWindow(xy);
                    if (hasFocus) ((ScrollView)findViewById(R.id.scrollView))
                            .smoothScrollBy(xy[0], xy[1]);
                }
            });

        }

2 - 或者您可以将按钮附加到滚动视图的底部,这样当键盘出现时,滚动视图和按钮都会高于滚动视图

3-您可以聆听键盘可见性并隐藏/显示您的按钮

这是此解决方案的链接: SoftKeyboard open and close listener in an activity in Android?

答案 2 :(得分:0)

AndroidManifest.xml在您的活动中添加android:windowSoftInputMode="adjustPan|stateHidden"

或者setKeyboardListener更改了滚动视图位置

答案 3 :(得分:0)

使用相对布局并放入scrollview android:layout_above =“浮动按钮”

这应该解决该按钮重叠或隐藏的问题。

还可以软输入调整声相

Scoll视图应仅包含一个视图 因此,将所有编辑文本放在线性或滚动视图内的任何布局内

答案 4 :(得分:0)

    <android.support.constraint.ConstraintLayout>
        <ScrollView .........> 
            <LinearLayout..........>
                <EditText .......  **//Add EditText around 6 to 7**
                ..............
               .............. />      
            </LinearLayout>
        </ScrollView>
        <RelativeLayout    **// Fix the button in bottom gravity.**
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="bottom">

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Bottom Gravity" />

        </RelativeLayout>
    </android.support.constraint.ConstraintLayout>

然后设置 androidmanifest.xml 文件

<activity
  android:windowSoftInputMode="adjustPan"/>

希望我已经解决了这个问题,它将为您提供帮助。

答案 5 :(得分:0)

重叠可能是由于Scrollview和Button中的这种限制所致:

app:layout_constraintBottom_toBottomOf="parent"

按如下所示修改您的布局:

<ConstraintLayout>
    <ScrollView
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/button">
        <LinearLayout
            layout_width="match_parent"
            layout_height="wrap_content"
            orientation="vertical">
            <EditText/>
            <EditText/>
            <!-- ... -->
            <ConstraintLayout />
        </LinearLayout>
    </ScrollView>
    <Button
        android:id="@+id/button"
        app:layout_constraintBottom_toBottomOf="parent"/>
</ConstraintLayout>

(此外,请注意,滚动视图只能有一个孩子。)