国产成人精品日本亚洲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 長沙做網站m.gtdgt.cn. 版權所有
長沙做網站多少錢   長沙做網站公司   長沙做網站價格   長沙做網站的 培訓班管理軟件
分享到:
主站蜘蛛池模板: 天天摸天天做天天爽 | 精品丰满少妇一区二区三区 | 久久影院视频 | 视频这里只有精品 | 蜜臀av性久久久久av蜜臀妖精 | www黄在线观看| 亚洲精品黄 | 成人免费高清在线观看 | 黄色专区 | 欧美国产日韩综合 | 夜夜躁狠狠躁日日躁 | 樱空桃在线观看 | 久久精品久久精品 | 在线免费亚洲 | 中文字幕av高清片 | jufd697佐佐木明希在线 | 好吊日av | 亚洲一区二区三区免费视频 | 末路1997全集免费观看完整版 | 亚洲欧洲在线观看 | 欧美性猛交7777777 | 国产精品无码AV麻豆国产 | 爱福利视频一区二区 | 成人免费看片网站 | 欧美性生话 | 91丨porny丨首页 | 91五月天 | 91字幕网 | 亚洲 自拍 另类 欧美 丝袜 | 午夜精品视频一区二区 | 国产一级在线视频 | 日本在线免费 | h网站免费观看 | 最近高清中文字幕免费 | 亲子伦一区二区三区观看方式 | 九九久久国产精品 | 五月花激情网 | 日韩精品免费在线播放 | 欧美一区二区在线看 | 夜色88v精品国产 | 四虎成人在线视频 |