Android键盘调整调整大小

时间:2015-08-19 07:36:09

标签: android xml android-layout android-studio android-fragments

我正在开发一个包含Activity和Fragment的应用程序。在片段布局中,我使用相对布局作为父布局,在底部和Scrollview之间使用一个按钮。 Scrollview包含editText框。如果我在滚动视图中点击上一个editTextBox,我的键盘会隐藏fragment。我在清单中尝试了adjustpan|adjustresize,也在我的fragment中尝试了但尚未解决的问题。

2 个答案:

答案 0 :(得分:1)

AndroidMenifest

中试试
android:windowSoftInputMode="stateAlwaysHidden|adjustResize

editext 中使用此

android:inputType="textMultiLine|textPostalAddress"
android:scrollbars="vertical"

答案 1 :(得分:0)

这有Android的错误。经过多次努力之后,我能够针对这个问题顺利解决问题。它是一个单行解决方案,但它有一些预先要求。一行是:

myHostnameVerifier

您的xml布局必须如下:

AndroidBug5497Workaround.assistActivity(this, R.id.LayoutInScrollView);

如果您没有使用全屏,则下列课程应该足够了:

RelativeLayout{

 HeaderView{}

 ScrollView{
  LinearLayout{ 
    @+id/LayoutInScrollView
  }
 }

 FooterView{}      // the buttons u want to appear above keyboard
}

如果您使用全屏,则需要以下课程(从windowSoftInputMode="adjustResize" not working with translucent action/navbar修改):

class AndroidBug5497Workaround{

    View svChildLayout;
    int originalGravity;
    Activity activity;

    /**
     * @param activity
     * @param svChildLayoutId  id of the layout that is the first child of the center ScrollView
     */
    public static void assistActivity (Activity activity, int svChildLayoutId) {
        new AndroidBug5497Workaround(activity, svChildLayoutId);
    }


    private AndroidBug5497Workaround(Activity activity, int svChildLayoutId) {

        this.activity = activity;
        svChildLayout = activity.findViewById(svChildLayoutId);
        originalGravity = ((ScrollView.LayoutParams)svChildLayout.getLayoutParams()).gravity;

        //Add listener
        FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
        mChildOfContent = content.getChildAt(0);
        mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                possiblyResizeChildOfContent2();
            }
        });

    }
    private void possiblyResizeChildOfContent2() {
        int usableHeightNow = computeUsableHeight();
        if (usableHeightNow != usableHeightPrevious) {
            int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
            int heightDifference = usableHeightSansKeyboard - usableHeightNow;
            if (heightDifference > (usableHeightSansKeyboard/4)) {
                // keyboard probably just became visible
                onKeyboardVisible();
            } else {
                // keyboard probably just became hidden
                onKeyboardHidden();
            }
            usableHeightPrevious = usableHeightNow;
        }
    }


    private void onKeyboardVisible() {

        ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();
        params.gravity = Gravity.TOP;
        svChildLayout.requestLayout();

        final ScrollView parentSv = (ScrollView) svChildLayout.getParent();
        parentSv.post(new Runnable() {
            @Override
            public void run() {
                View focusedEditText = activity.getWindow().getCurrentFocus();
                parentSv.smoothScrollTo(0, focusedEditText.getTop() );
            }
        });
    }

    private void onKeyboardHidden() {
        ScrollView.LayoutParams params = (ScrollView.LayoutParams) svChildLayout.getLayoutParams();
        params.gravity = originalGravity;
        svChildLayout.requestLayout();
    }
}
相关问题