6

私のアクティビティには、上部のバーと下部のバーがあります。トップバーとボトムバーの間のスペースには、内部にいくつかの edittext ビューがある線形レイアウトがあります。ソフトキーボードが表示されるたびにレイアウトのサイズを変更したくないので、マニフェストのアクティビティに android:windowSoftInputMode="adjustPan" を設定します。しかし、ソフトキーボードが開いているときに、下にスクロールして別の編集テキストを選択して入力したいのですが、それができません。ソフトキーボードを閉じると、一番下の編集テキストしか選択できません。それは非常に面倒で不便です。ソフトキーボードのスクロールビューとアジャストパンモードの両方をうまく連携させるにはどうすればよいですか?

私を助けてください。本当にありがとうございます。

4

2 に答える 2

4

最後に、私の問題の回避策を見つけたので、将来同じ問題が発生する可能性がある人のために共有したいと思います. 次のように私のレイアウトの簡単な説明:

<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" を設定することを忘れないでください。これが誰かが同じ問題を抱えているのに役立つことを願っています。

于 2012-04-21T03:00:15.433 に答える
1

それら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>
于 2012-04-20T05:49:24.527 に答える