我的应用程序设计让我对每个表单视图都有这种布局:视图底部的浮动按钮。我使用ConstraintLayout
动态设置按钮的高度,无论屏幕宽度如何,总是保持相同的左/右边距,因此我最终得到了这个布局:
<ConstraintLayout>
<ScrollView>
<EditText/>
<EditText/>
<!-- ... -->
<ConstraintLayout /> (1)
</ScrollView>
<Button/>
</ConstraintLayout>
(1)带有底部按钮高度的清晰视图,以便不会隐藏滚动视图底部的视图,这些视图将被按钮隐藏
基本上,这就是它的样子:
现在我遇到的问题是当我点击底部的编辑文本时,例如这里是第4个:
编辑文本向上移动键盘,但不是浮动按钮,它经常被它隐藏。我知道我必须在编辑文本的onFocusChanged()
方法中做一些事情,但我不知道是什么......
答案 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>
(此外,请注意,滚动视图只能有一个孩子。)