1. 程式人生 > >android開發步步為營之105:解決鍵盤彈起頁面被頂上去問題

android開發步步為營之105:解決鍵盤彈起頁面被頂上去問題

           這個問題,我想大家經常碰到,網上回答的很多,但是沒有找到我想要的,網上提供的解決方案:1、比如Android:windowsoftinputmode="adjustpan"  2、使用scrollview 兩種都沒有解決我的問題,後來我就各種除錯啊,各種的Android:windowsoftinputmode組合,都不可以解決,後來,仔細想了下會不會頁面的RelativeLayout的問題,然後將頁面的佈局換了一遍,最外層的RelativeLayout換成LinearLayout或者FrameLayout,問題解決。下面來分享一下。

           先看下之前的效果(編輯第一個標籤):

            

           現在的效果(同樣編輯第一個標籤)

           

           原先的頁面設計:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_meme"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/layout_head"
        layout="@layout/layout_head"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_alignParentTop="true"></include>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/layout_head"
        android:layout_marginTop="22dp"
        android:gravity="center">

        <RelativeLayout
            android:id="@+id/layout_meme_container"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">

            <ImageView
                android:id="@+id/img_meme"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@color/preview_bg"
                android:scaleType="fitXY"
                android:src="@drawable/preview_default" />
        </RelativeLayout>
    </RelativeLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_message"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="8dp"
            android:layout_weight="11"
            android:background="@drawable/shape_textview_background"
            android:hint="@string/lbl_input_texts"
            android:maxLength="100"
            android:textColor="#666666"
            android:textCursorDrawable="@null"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/img_random"
            android:layout_width="60dp"
            android:layout_height="40dp"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="5dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:background="@drawable/selector_button_bg"
            android:scaleType="center"
            android:src="@drawable/ic_random_meme" />
    </LinearLayout>


</RelativeLayout>


           現在的頁面設計:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_meme"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include
        android:id="@+id/layout_head"
        layout="@layout/layout_head"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_alignParentTop="true"></include>

    <FrameLayout
        android:id="@+id/layout_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_below="@+id/layout_head"
        android:layout_marginTop="22dp"
        android:gravity="center">

        <ImageView
            android:id="@+id/img_meme"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:background="@color/preview_bg"
            android:scaleType="fitXY"
            android:src="@drawable/preview_default" />
        <RelativeLayout
            android:layout_gravity="center_horizontal"
            android:id="@+id/layout_meme_container"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </RelativeLayout>
    </FrameLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_message"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="8dp"
            android:layout_weight="11"
            android:background="@drawable/shape_textview_background"
            android:hint="@string/lbl_input_texts"
            android:maxLength="100"
            android:textColor="#666666"
            android:textCursorDrawable="@null"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/img_random"
            android:layout_width="60dp"
            android:layout_height="40dp"
            android:layout_gravity="center_vertical"
            android:layout_marginEnd="5dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:background="@drawable/selector_button_bg"
            android:scaleType="center"
            android:src="@drawable/ic_random_meme" />
    </LinearLayout>


</LinearLayout>

           另外textview設定onTouch事件
memeTextView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //如果標籤在下面,點選時則頁面向上頂起,保證編輯的textview可見
                    if(memeTextView.getTop()>=CommonUtil.getScreenHeight(MemeMakeActivity.this)/2)
                    {
                        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

                    }else {
                        //如果標籤在頁面上面,點選時則頁面不需要向上頂起,保證編輯的textview可見
                        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
                    }

                    imgEdit.setVisibility(View.VISIBLE);
                    mCurrentMemeText = memeTextView;
                    String title = txtTitle.getText().toString();
                    mEtText.setText(title);
                    mEtText.setSelection(title.length());
                    clearChoosedStatus(mCurrentMemeText);
                    return false;
                }
            });



           總結:設計頁面的時候,儘量少用的RelativeLayout,多用用LinearLayout。