我正在尝试在Andorid中创建一个布局。我需要一个固定在屏幕底部的TextView(下图中的2)。内容(图中的1)包括scrollview和editTexts。
我遇到的问题是当软键盘出现时(图中为3),标有2的红色框也出现在键盘上方。我希望红色框保持在屏幕外,整个内容在软键盘上方的空间中滚动。
我尝试将红色框(2)放在LinearLayout中,但它从不将自己固定在底部,屏幕底部总是有一个小间隙。我也尝试在清单中更改android:windowSoftInputMode,但这不是理想的效果。
这就是我所拥有的:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:isScrollContainer="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText />
<EditText />
</LinearLayout>
</ScrollView>
<TextView
android:id="@+id/3"
android:layout_alignParentBottom="true"
text="3" />
</RelativeLayout>
非常感谢任何建议。
答案 0 :(得分:0)
您需要做的就是将活动的windowSoftInputMode标志切换为“adjustPan”。查看CommitInfo entity了解详情。
{{1}}
答案 1 :(得分:0)
尝试使用以下布局,看看这是否是您要找的..
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:isScrollContainer="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<EditText
android:layout_width="80dp"
android:layout_height="40dp"
android:id="@+id/ed1"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"/>
<EditText
android:layout_width="80dp"
android:layout_height="40dp"
android:id="@+id/ed2"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"/>
</LinearLayout>
</ScrollView>
<TextView
android:id="@+id/btext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="this is 3rd view"
android:layout_marginBottom="20dp"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
TL; DR版本,我刚刚在你的滚动视图代码中删除了两行:
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
带
android:layout_centerInParent="true"
看看是否有帮助!
你有任何理由同时使用 android:layout_alignParentTop =“true” 在scrollview上 android:layout_alignParentBottom =“true”?
答案 2 :(得分:0)
这里有一个有用的想法。
您的xml应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:isScrollContainer="false">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText />
<EditText />
<View
android:id="@+id/stretcher"
android:layout_width="match_parent"
android:layout_height="0dp" />
<TextView
android:id="@+id/2"
android:layout_gravity="bottom"
text="2" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
现在在你的java onActivityCreated中添加以下代码:
final View mainLayout = getView();
final View mainContent = getView().findViewById(R.id.content);
final View stretcherView = getView().findViewById(R.id.stretcher);
//Main layout uses weight some, so we can't hard code the size of the circles.
//We must dynamically re-size
mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (android.os.Build.VERSION.SDK_INT >= 16) {
mainLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
//Calculate the desired height of the stretcher view to be the remainder between full screen and content.
int stretchHeight = mainLayout.getHeight() - mainContent.getHeight();
//Apply calculated height remainder to stretched view.
//This enables our bottom box to be pushed to the bottom without obstructing the content when the keyboard appears.
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) stretcherView.getLayoutParams();
params.height = stretchHeight;
stretcherView.setLayoutParams(params);
}
});
视图侦听器测量完整视图的高度,然后减去内容的高度。这使我们看到内容和屏幕底部之间的差距。使用担架视图,我们现在可以将红色框向下推到页面底部,就像它是alignParentBottom一样。 当键盘出现时,红色框位于滚动内。