回答
您無法獲得鍵盤高度,但是您可以獲得視圖的高度,這正是您真正想要的 - 並且您會將此數據提供給onLayout調用進入當前視圖。
我的看法給了設備的全部高度。所以,這個信息不會給虛擬鍵盤高度。但是,我找到了一種方法來獲得它。在我請求打開虛擬鍵盤之後,我發送了我生成的指針事件。它們的y座標從設備的高度開始並減小。並且,在將這些事件發送給系統後,當虛擬鍵盤上的指針事件發生時,系統會拋出異常。如果這些指針事件不在虛擬鍵盤上,則沒有例外。所以我可以得到虛擬鍵盤的高度。 – Adem 2011-06-17 05:50:49
它實際上是Android模型與導航欄? – 2017-06-19 11:55:31
您可以使用此示例代碼。它是骯髒的解決方案,但它的工作
Thread t = new Thread(){
public void run() {
int y = mainScreenView.getHeight()-2;
int x = 10;
int counter = 0;
int height = y;
while (true){
final MotionEvent m = MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN,
x,
y,
INTERNAL_POINTER_META_STATE);
final MotionEvent m1 = MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_UP,
x,
y,
INTERNAL_POINTER_META_STATE);
boolean pointer_on_softkeyboard = false;
try {
getSingletonInstrumentation().sendPointerSync(m);
getSingletonInstrumentation().sendPointerSync(m1);
} catch (SecurityException e) {
pointer_on_softkeyboard = true;
}
if (!pointer_on_softkeyboard){
if (y == height){
if (counter++ < 100){
Thread.yield();
continue;
}
} else if (y > 0){
softkeyboard_height = mainScreenView.getHeight() - y;
}
break;
}
y--;
}
if (softkeyboard_height > 0){
// it is calculated and saved in softkeyboard_height
} else {
calculated_keyboard_height = false;
}
}
};
t.start();
INTERNAL_POINTER_META_STATE在哪裏? metaState被引用到KeyEvent API:http://developer.android.com/reference/android/view/KeyEvent.html#getMetaState()但無法找到INTERNAL_POINTER_META_STATE。 – lordhong 2012-05-01 15:48:02
INTERNAL_POINTER_META_STATE只是標識此事件源的標識。因此您可以跟蹤由您或設備生成的指針事件。你應該設置一個整數值爲INTERNAL_POINTER_META_STATE – Adem 2012-05-03 14:55:41
什麼是getSingletonInstrumentation()方法? – yahya 2013-01-07 12:10:03
此解決方案也hacky,但解決問題(至少對我來說)。
- 我在屏幕底部有透明背景的臨時視圖。所以這個觀點將是不可見的。
- 我在清單中的活動標記中添加了
android:windowSoftInputMode="adjustResize"
標誌。 現在的主要故事在
onGlobalLayout()
。在那裏,我計算了臨時視圖的y軸和根視圖的高度之間的差異。final View view = findViewById(R.id.base); 。 view.getViewTreeObserver()addOnGlobalLayoutListener(新OnGlobalLayoutListener(){
@Override public void onGlobalLayout() { int rootViewHeight = view.getRootView().getHeight(); View tv = findViewById(R.id.temp_view); int location[] = new int[2]; tv.getLocationOnScreen(location); int height = (int) (location[1] + tv.getMeasuredHeight()); deff = rootViewHeight - height; // deff is the height of soft keyboard }
});
不錯的把戲兄弟。 – kobbycoder 2015-11-15 03:26:11
試試這個
KeyboardView keyboardView = new KeyboardView(getApplicationContext(), null);
int height = (keyboardView.getKeyboard()).getHeight();
Toast.makeText(getApplicationContext(), height+"", Toast.LENGTH_LONG).show();
如果你不想在你的應用程序android:windowSoftInputMode="adjustResize"
做。 你可以嘗試這樣的事情:
any_view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = main_layout.getHeight();
Log.w("Foo", String.format("layout height: %d", height));
Rect r = new Rect();
main_layout.getWindowVisibleDisplayFrame(r);
int visible = r.bottom - r.top;
Log.w("Foo", String.format("visible height: %d", visible));
Log.w("Foo", String.format("keyboard height: %d", height - visible));
}
});
getWindowVisibleDisplayFrame不適合我..它返回視圖的高度 – 2015-08-20 08:41:47
- 1. Android虛擬鍵盤KeyListener獲取虛擬鍵盤按鍵
- 2. qml虛擬鍵盤:keyboardDesignWidth和高度
- 3. android webview虛擬鍵盤
- 4. Android虛擬鍵盤位置
- 5. 虛擬鍵盤
- 6. 如何在android中獲取自定義虛擬鍵盤?
- 7. Android:阻止虛擬鍵盤上的鍵
- 8. Android中的虛擬鍵盤問題
- 9. android 2.3.3中的虛擬鍵盤風景
- 10. C中的虛擬鍵盤#
- 11. JavaScript中的虛擬鍵盤
- 12. 在android中隱藏虛擬鍵盤?
- 13. Jquery虛擬鍵盤
- 14. 了虛擬鍵盤
- 15. 虛擬鍵盤javascript
- 16. 虛擬鍵盤wpf
- 17. JavaFX虛擬鍵盤
- 18. Flex:虛擬鍵盤
- 19. Android軟鍵盤/虛擬鍵盤重力/顯示在中心
- 20. 虛擬寬度,虛擬高度,%
- 21. 如何獲取Windows Phone 7中的虛擬鍵盤?
- 22. 頂部的虛擬鍵盤
- 23. ExtJS的虛擬鍵盤
- 24. Android虛擬鍵盤未顯示
- 25. 虛擬鍵盤問題在android
- 26. 添加硬件鍵盤時獲取iOS鍵盤高度
- 27. 打開鍵盤時獲取鍵盤高度或頂部位置
- 28. Android 3:模擬虛擬鋼琴鍵盤的軟鍵盤的行爲
- 29. Android:在WebView中處理虛擬鍵盤上的按鍵
- 30. 動畫虛擬鍵盤
軟鍵盤是不是唯一的系統提供的裝飾,它可以使用的屏幕空間。你打算如何處理這個尺寸? – adamp 2011-05-15 16:18:27
我想在軟虛擬鍵盤的頂部繪製一些圖像。我開發2D應用程序,所以我不使用Android UI庫。例如,我想繪製軟鍵盤的邊框頂部 – Adem 2011-05-16 16:32:21
虛擬鍵盤不會向上推窗口嗎?在這種情況下,您只需要在屏幕底部劃一條線來繪製頂部邊框(在軟鍵盤被激活之前設置爲不可見) – keyser 2011-05-18 15:01:42