国产成人精品日本亚洲999I久久资源在线I亚洲88avI久久久av免费观看I99re6热在线精品视频播放速度I91成人精品I夫妻avI五月天综合婷婷I五月色综合I久操视频在线播放Iwww.亚洲色图I国产一级免费观看I幸福花园动漫完整版双男主

湘龍工作室提供長沙做網站,長沙建站,長沙網站開發,軟件制作,網站優化,域名注冊,網絡空間
長沙做網站

安卓開發監聽軟鍵盤的顯示狀態和獲取軟鍵盤的高度

發布時間:2015/11/28 來源:長沙做網站

 有時候在開發過程中需要監聽軟鍵盤的顯示狀態,在顯示和隱藏鍵盤時對UI做出相應的調整。Android官方沒有提供獲取軟鍵盤高度和狀態的方法,但是可以通過監聽當前應用的高度變化計算
 
出軟鍵盤的高度。
 
首先獲取到activity布局的最外層layout,通過調用getWindowVisibleDisplayFrame獲取到整個應用可以顯示的區域,這其中包括ActionBar和狀態欄,但不含設備底部的虛擬按鍵。
再通過調用getRootView().getHeight(),獲取整個屏幕的高度。同樣,這個高度也不含虛擬按鍵的高度。
 
通過比較這兩個高度,可以推斷出軟鍵盤是否顯示,并且獲取到軟鍵盤的高度。
 
需要注意的是,這種方法前提是軟鍵盤會影響界面布局,所以需要在AndroidManifest里給activity添加android:windowSoftInputMode="adjustResize"。
 
具體實現代碼如下:
private LinearLayout layout_main;
private TextView text;
 
// 狀態欄的高度
private int statusBarHeight;
// 軟鍵盤的高度
private int keyboardHeight;
// 軟鍵盤的顯示狀態
private boolean isShowKeyboard;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    statusBarHeight = getStatusBarHeight(getApplicationContext());
 
    text = (TextView) findViewById(R.id.text);
    layout_main = (LinearLayout) findViewById(R.id.layout_main);
 
    layout_main.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);
}
 
private ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
 
    @Override
    public void onGlobalLayout() {
        // 應用可以顯示的區域。此處包括應用占用的區域,
        // 以及ActionBar和狀態欄,但不含設備底部的虛擬按鍵。
        Rect r = new Rect();
        layout_main.getWindowVisibleDisplayFrame(r);
 
        // 屏幕高度。這個高度不含虛擬按鍵的高度
        int screenHeight = layout_main.getRootView().getHeight();
 
        int heightDiff = screenHeight - (r.bottom - r.top);
 
        // 在不顯示軟鍵盤時,heightDiff等于狀態欄的高度
        // 在顯示軟鍵盤時,heightDiff會變大,等于軟鍵盤加狀態欄的高度。
        // 所以heightDiff大于狀態欄高度時表示軟鍵盤出現了,
        // 這時可算出軟鍵盤的高度,即heightDiff減去狀態欄的高度
        if(keyboardHeight == 0 && heightDiff > statusBarHeight){
            keyboardHeight = heightDiff - statusBarHeight;
        }
 
        if (isShowKeyboard) {
            // 如果軟鍵盤是彈出的狀態,并且heightDiff小于等于狀態欄高度,
            // 說明這時軟鍵盤已經收起
            if (heightDiff <= statusBarHeight) {
                isShowKeyboard = false;
                onHideKeyboard();
            }
        } else {
            // 如果軟鍵盤是收起的狀態,并且heightDiff大于狀態欄高度,
            // 說明這時軟鍵盤已經彈出
            if (heightDiff > statusBarHeight) {
                isShowKeyboard = true;
                onShowKeyboard();
            }
        }
    }
};
 
private void onShowKeyboard() {
    // 在這里處理軟鍵盤彈出的回調
    text.setText("onShowKeyboard : keyboardHeight = " + keyboardHeight);
}
 
private void onHideKeyboard() {
    // 在這里處理軟鍵盤收回的回調
    text.setText("onHideKeyboard");
}
 
@Override
protected void onDestroy() {
    super.onDestroy();
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        layout_main.getViewTreeObserver().removeGlobalOnLayoutListener(globalLayoutListener);
    } else {
        layout_main.getViewTreeObserver().removeOnGlobalLayoutListener(globalLayoutListener);
    }
}
 
// 獲取狀態欄高度
public static int getStatusBarHeight(Context context) {
    try {
        Class<?> c = Class.forName("com.android.internal.R$dimen");
        Object obj = c.newInstance();
        Field field = c.getField("status_bar_height");
        int x = Integer.parseInt(field.get(obj).toString());
        return context.getResources().getDimensionPixelSize(x);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 0;
}
做網站版權所有 2009-2015 湘ICP備11020044號   sitemap
地址:長沙市天心區五一西路189號錦繡中環29樓(已搬至岳麓區金星北路89號)   郵編:410001
電話:0731-82067301   QQ:2668200050   Email:longyun1077@163.com
湘龍工作室為您提供:長沙做網站,長沙建站,長沙網站開發,軟件制作,網站優化,域名注冊,網絡空間服務
Copyright 2002-2010 長沙做網站www.gtdgt.cn. 版權所有
長沙做網站多少錢   長沙做網站公司   長沙做網站價格   長沙做網站的 培訓班管理軟件
分享到:
主站蜘蛛池模板: 日本亚洲欧美在线 | 桥本有菜aⅴ一区二区三区 日韩免费网 | 综合网色| 成人在线h| 女生扒开尿口给男生捅 | 日本一级二级视频 | 野外性满足hd | 日韩在线观看免费 | 大陆av在线 | 依依av| 一级片免费的 | 做爰xxxⅹ性69免费软件 | 久久色网站 | 亚洲无专砖码直接进入 | 日韩成人午夜影院 | 久久涩视频 | www干| 另类视频在线观看 | 操女人视频网站 | 亚洲丁香网 | 台湾佬中文在线 | 91日韩免费| 国产欧美亚洲一区 | 污片免费网站 | 中文字幕99| 人人草影院 | 黑人狂躁日本妞一区二区三区 | 人人草人人看 | 国产91入口 | 伊人亚洲综合网 | 国内精品久久久久 | 成人黄色大片 | 岛国精品在线播放 | 91精品人妻一区二区三区四区 | 成年人黄色录像 | 一级片黄色的 | 丰满人妻一区二区三区53视频 | 日日夜夜网站 | 国产一区二区三区久久 | 免费黄色在线 | 91精品网 |