Android 仿UC瀏覽器詳情頁(yè)評(píng)論彈框效果

大概就這種效果

額,突然發(fā)現(xiàn)UC被我卸載了,這個(gè)是QQ瀏覽器的效果,不過都一樣,如果當(dāng)前頁(yè)面不是全屏的話,把根布局設(shè)為相對(duì)布局,然后設(shè)置評(píng)論布局為處于底部,這樣在點(diǎn)擊評(píng)論時(shí)彈開鍵盤會(huì)觸發(fā)布局重繪,底部的評(píng)論也會(huì)處于軟鍵盤的上方,鍵盤消息,布局下移,但是我們要說的是全屏的情況下我們?nèi)绾翁幚怼?br> 首先要監(jiān)聽到軟件盤彈起,然后再設(shè)置評(píng)論的popupWindow

import android.app.Activity;
import android.graphics.Rect;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.ViewTreeObserver;

public class KeyboardStatusDetector {

    private static final int SOFT_KEY_BOARD_MIN_HEIGHT = 100;
    private KeyboardVisibilityListener mVisibilityListener;

    boolean keyboardVisible = false;

    public KeyboardStatusDetector registerFragment(Fragment f) {
        return registerView(f.getView());
    }

    public KeyboardStatusDetector registerActivity(Activity a) {
       return registerView(a.getWindow().getDecorView().findViewById(android.R.id.content));
    }

    public KeyboardStatusDetector registerView(final View v) {
        v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                v.getWindowVisibleDisplayFrame(r);
                //int heightDiff = v.getRootView().getHeight() - (r.bottom - r.top);
                int heightDiff = v.getRootView().getHeight() - r.bottom;
                LogUtils.e("鍵盤A--->", v.getRootView().getHeight() +"   "+ r.bottom +"  "+ r.top);
                if (heightDiff > SOFT_KEY_BOARD_MIN_HEIGHT) { // if more than 100 pixels, its probably a keyboard...
                    if (!keyboardVisible) {
                        keyboardVisible = true;
                        if (mVisibilityListener != null) {
                            mVisibilityListener.onVisibilityChanged(true, heightDiff);
                        }
                    }
                } else {
                    if (keyboardVisible) {
                        keyboardVisible = false;
                        if (mVisibilityListener != null) {
                            mVisibilityListener.onVisibilityChanged(false, heightDiff);
                        }
                    }
                }
            }
        });

        return this;
    }

    public KeyboardStatusDetector setVisibilityListener(KeyboardVisibilityListener listener) {
        mVisibilityListener = listener;
        return this;
    }

    public interface KeyboardVisibilityListener {
        void onVisibilityChanged(boolean keyboardVisible, int heightDiff);
    }
}

然后再對(duì)popupWindow進(jìn)行設(shè)置位置

private void showSendMsgPop() {
        if (null == sendMsgPopup) {
            sendMsgPopup = new SendMsgPopupWindow(NewsDetailsActivity.this);
        }
      //設(shè)置處于底部
        sendMsgPopup.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
    }

當(dāng)然,最后最關(guān)鍵的是popupWindow里的配置,要不然popupWindow會(huì)被軟鍵盤遮擋。

@Override
    public void dismiss() {
        super.dismiss();
        // 評(píng)論框消息的同時(shí)把軟鍵盤關(guān)閉
        KeyBoardUtils.closeKeybord(editText, mContext);
    }

    public void showAtLocation(View parent, int gravity, int x, int y) {
       // 這三行配置是關(guān)鍵
        this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        this.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); // 在顯示輸入法之后調(diào)用,否則popupwindow會(huì)在窗口底層
        super.showAtLocation(parent, gravity, x, y);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,347評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,118評(píng)論 2 59
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,236評(píng)論 3 119
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,183評(píng)論 22 665
  • 約幾個(gè)漂亮姐妹,開啟我2018海南之旅,享受陽(yáng)光、沙灘和美景。 3月9日出行,中午有好姐姐細(xì)...
    三平999閱讀 1,165評(píng)論 0 4

友情鏈接更多精彩內(nèi)容