我的活动有一个顶栏和一个底栏。顶栏和底栏之间的空间我有一个线性布局,里面有几个编辑文本视图。因为我不希望每次出现软键盘时都调整布局大小,所以我在清单中为我的活动设置了 android:windowSoftInputMode="adjustPan" 。但是当软键盘打开时,我想向下滚动以选择另一个要输入的编辑文本,它不允许我这样做。当我关闭软键盘时,我只能选择底部的编辑文本。这是非常烦人和不方便的。我怎样才能让软键盘的滚动视图和 ajustpan 模式一起工作?
请帮帮我。非常感谢。
我的活动有一个顶栏和一个底栏。顶栏和底栏之间的空间我有一个线性布局,里面有几个编辑文本视图。因为我不希望每次出现软键盘时都调整布局大小,所以我在清单中为我的活动设置了 android:windowSoftInputMode="adjustPan" 。但是当软键盘打开时,我想向下滚动以选择另一个要输入的编辑文本,它不允许我这样做。当我关闭软键盘时,我只能选择底部的编辑文本。这是非常烦人和不方便的。我怎样才能让软键盘的滚动视图和 ajustpan 模式一起工作?
请帮帮我。非常感谢。
最后,我找到了解决我的问题的方法,所以我想分享给将来可能会遇到同样问题的人。我的布局的简要说明如下:
<myRelativeLayout>
<topbar.../>
<myscrollView>
<linearLayout>
//all stuff controls:editview,textview,....
</linearLayout>
</myscrollView>
<bottombar.../>
我创建自定义类 myRelativeLayout 扩展 RelativeLayout
public class myRelativeLayout extends RelativeLayout{
public interface OnRelativeLayoutChangeListener {
void onLayoutPushUp();
void onLayoutPushDown();
}
private OnRelativeLayoutChangeListener layoutChangeListener;
public myRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int proposedheight = MeasureSpec.getSize(heightMeasureSpec);
final int actualHeight = getHeight();
if (actualHeight > proposedheight){
// Keyboard is shown
layoutChangeListener.onLayoutPushUp();
} else if(actualHeight < proposedheight){
// Keyboard is hidden
layoutChangeListener.onLayoutPushDown();
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void setLayoutChangeListener(OnRelativeLayoutChangeListener layoutChangeListener) {
this.layoutChangeListener = layoutChangeListener;
}
public OnRelativeLayoutChangeListener getLayoutChangeListener() {
return layoutChangeListener;
}
}
在我的活动中,我只是将 myRelativeLayout 的 setLayoutChangeListener 设置为在软键盘显示时隐藏底栏,并在软键盘隐藏时显示底栏:
myRlayout.setLayoutChangeListener(new OnRelativeLayoutChangeListener() {
@Override
public void onLayoutPushUp() {
// TODO Auto-generated method stub
myBottombar.setVisibility(View.GONE);//in my case i need to setVisibility(View.GONE) to bottombar in order for this bar is not displayed when softkeyboard show up.
}
@Override
public void onLayoutPushDown() {
// TODO Auto-generated method stub
myBottombar.setVisibility(View.VISIBLE);// redisplay myBottombar when keyboard is closed.
}
});
不要忘记为活动设置 android:windowSoftInputMode="adjustResize"。希望这对遇到同样问题的人有用。
把它们EditText
放在ScrollView
这样的位置:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>