簡體   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