繁体   English   中英

如果键盘处于打开状态,则隐藏activity_main.xml的一部分(Android)

[英]Hide part of activity_main.xml if keyboard is open (Android)

我在底部显示了以下activity_main.xml 在那里,出现一个CoordinatorLayout和两个LinearLayouts 第一个LinearLayout1具有一个EditText输入一些文本,并带有一个发送按钮。 第二个有另外两个按钮。

如果我单击EditText ,键盘将显示出来,并使LinearLayout2中的所有内容几乎不可见。 所以,我想在打开键盘时将两个按钮都隐藏在最后一个布局中。

我已经发现使用android:windowSoftInputMode="stateHidden"可能是诀窍,但仅与AndroidManifest.xml活动有关。 我只想在第二线性布局中使用此内部。 已经尝试在此使用它,但没有成功。

另外,我要在xml中处理什么并保持MainActivity代码干净。 有任何可能吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <android.support.design.widget.CoordinatorLayout>
        <android.support.v7.widget.RecyclerView/>
    </android.support.design.widget.CoordinatorLayout>

    <LinearLayout>
        <EditText/>
        <Button android:id="@+id/button_send"/>
    </LinearLayout>

    <LinearLayout>
        <Button/>
        <Button/>
    </LinearLayout>

</LinearLayout>

过去我们也遇到过同样的问题,因此我们在完整布局对象上放置了一些可观察的对象,请尝试一下并让我知道

/*Hide button when keyboard is open*/
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        Rect r = new Rect();
        view.getWindowVisibleDisplayFrame(r);

        int heightDiff = view.getRootView().getHeight() - (r.bottom - r.top);

        if (heightDiff > 244) { // if more than 100 pixels, its probably a keyboard...
            //ok now we know the keyboard is up...
            buttonLayout.setVisibility(View.GONE);


        } else {
            //ok now we know the keyboard is down...
            buttonLayout.setVisibility(View.VISIBLE);


        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM