有沒有辦法知道屏幕上顯示的鍵盤的尺寸?獲取軟鍵盤的尺寸
我正在使用Cocos2dx進行編程,但我想知道Android或Coco部分屏幕中顯示的鍵盤高度,這並不重要。
我知道鍵盤有一個getHeight()方法,但我不想創建新的鍵盤,我想使用默認的鍵盤。
有沒有辦法知道屏幕上顯示的鍵盤的尺寸?獲取軟鍵盤的尺寸
我正在使用Cocos2dx進行編程,但我想知道Android或Coco部分屏幕中顯示的鍵盤高度,這並不重要。
我知道鍵盤有一個getHeight()方法,但我不想創建新的鍵盤,我想使用默認的鍵盤。
我們做到了這個
myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
Rect r = new Rect();
parent.getWindowVisibleDisplayFrame(r);
int screenHeight = parent.getRootView().getHeight();
int heightDifference = screenHeight - (r.bottom - r.top);
Log.d("Keyboard Size", "Size: " + heightDifference);
//boolean visible = heightDiff > screenHeight/3;
}
});
我們只調整與鍵盤的意見,所以我們可以利用這一點。
,如果你的活動是不是全屏,使用下面的代碼:在cocos2d-x我們已經得到CCEditBox
content.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
if (keyBoardHeight <= 100) {
Rect r = new Rect();
content.getWindowVisibleDisplayFrame(r);
int screenHeight = content.getRootView()
.getHeight();
int heightDifference = screenHeight
- (r.bottom - r.top);
int resourceId = getResources()
.getIdentifier("status_bar_height",
"dimen", "android");
if (resourceId > 0) {
heightDifference -= getResources()
.getDimensionPixelSize(resourceId);
}
if (heightDifference > 100) {
keyBoardHeight = heightDifference;
}
Log.d("Keyboard Size", "Size: " + heightDifference);
}
// boolean visible = heightDiff > screenHeight/3;
}
});
謝謝,status_bar_height是非常非常重要的,如果你想翻譯編輯視圖Y – djdance
。
內部擴展 - > GUI-> CCEditBox,你可以找到類CCEditBox。
美的是它隱藏在現場其他地方的敲擊鍵盤。並在您的編輯框放置在場景太低時自動移動鍵盤。
如果使用了cocos2d-x V2.1.3,那麼你可以通過導航前往
標本:> CPP-> TestCpp->類 - > ExtensionTest-> EditBoxTest到示例項目。
從現在開始我只是用它來代替CCTextField。只是碰到它昨天:)
,並抱歉沒有添加它作爲評論,因爲我根本不能。 –
Rect r = new Rect();
View rootview = this.getWindow().getDecorView(); // this = activity
rootview.getWindowVisibleDisplayFrame(r);
的這個結果是空間應用程序使用屏幕上的量(即使活動不調整工作)。顯然,剩下的屏幕空間將通過鍵盤(如果可見)使用
你不能告訴。不,真的:你根本看不出。
鍵盤不需要是任何特定的形狀。它不必放置在屏幕底部(most popular選項are not的many),當您更改文本字段時(它們幾乎不依賴於標誌),它不必保持其當前大小。它甚至不必是rectangular。它也可能只是接管了entire screen。
您是否找到了解決方案,或者Android僅僅是無法提供真正的應用程序?我的意思是,在某種意義上是超動態的,但不是爲了處理動態 –
安卓顯示屏幕的ROOT_VIEW可以被視爲一個單一的屏幕視圖,其中包含顯示活動視圖的可見顯示框。
當顯示或隱藏屏幕上的SOFT KEYBOARD時,此可見顯示框會被調整。
注:請看兩個圖像通過點擊,以便更好地理解下面給出的鏈接
所以顯示屏的根視圖可以看作:
的調整具有SOFT KEYBOARD打開和關閉的可見顯示框可以被顯示爲: VISIBLE_DISPLAY_SCREEN adjustment
這種對VISUAL DISPLAY FRAME的調整可以很好地使用找出鍵盤作爲高度:
(當軟鍵盤是打開的)
SOFT_KEYBOARD_HEIGHT = ROOT_VIEW_HEIGHT - (VISUAL_DISPLAY_FRAME_HEIGHT + EXTRA_SCREEN_HEIGHT)
實現上述的代碼是:
int mExtraScreenHeight=-1, mKeyboardHeight=-1;
boolean mKeyboardOpen;
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int rootViewHeight, visibleDisplayFrameHeight, fakeHeight;
/* (rootViewHeight - visibleDisplayFrameHeight) is not the real height of the keyboard
it is the fake height as it also consist of extra screen height
so FAKE_HEIGHT = KEYBOARD_HEIGHT + EXTRA_SCREEN_HEIGHT
To get keyboard height extra screen height must be removed from fake height
*/
Rect rect = new Rect();
rootView.getWindowVisibleDisplayFrame(rect);
rootViewHeight = rootView.getRootView().getHeight();
visibleDisplayFrameHeight = rect.height();
fakeHeight = rootViewHeight-visibleDisplayFrameHeight;
if (mExtraScreenHeight == -1){
mExtraScreenHeight=fakeHeight;
}
/* Suppose the soft keyboard is open then the VISIBLE_DISPLAY_FRAME is in reduced size
due to the space taken up by extra screen and the keyboard but when the soft keyboard closes
then KEYBOARD_HEIGHT=0 and thus FAKE_HEIGHT = EXTRA_SCREEN_HEIGHT
*/
else if (fakeHeight <= mExtraScreenHeight){
mExtraScreenHeight=fakeHeight;
mKeypadOpen=false;
}
else if (fakeHeight > mExtraScreenHeight){
mKeypadHeight=fakeHeight-mExtraScreenHeight;
mKeypadOpen=true;
}
}
});
注意:本onGlobalLayout()函數將被調用,只有當全球佈局更改,如WH軟鍵盤打開。所以軟鍵盤必須打開至少一次以獲得軟鍵盤的高度。
它爲我;)
如果你要計算的虛擬鍵盤高度,同時你的活動不會改變大小(adjustPan),那麼你可以使用此示例:
https://github.com/siebeprojects/samples-keyboardheight
它使用一個隱藏窗口來計算窗口和活動根視圖之間的高度差。
對不起,不能評論,兩個或三個答案幫助我解決了我的問題,他們涉及到使用AddOnGlobalLayoutListener,然後確定鍵盤出現前後的剩餘高度。
我使用的解決方案是基於Rudy_TM的答案。
不過,有一點我必須找到是爲了使該方法的工作,你必須具備以下行某處
Window.SetSoftInputMode(SoftInput.AdjustResize);
之前,我有SoftInput.AdjustNothing(或類似的東西)和它不會工作。現在它運作完美。感謝您的答案!
我知道這是一箇舊帖子,但我注意到我選擇的解決方案並不適用於所有設備。似乎有一個矛盾,所以我實現這一點,它似乎是一個包羅萬象的:
final int[] discrepancy = new int[1];
discrepancy[0] = 0;
// this gets the height of the keyboard
content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
View rootview = activity.getWindow().getDecorView(); // this = activity
rootview.getWindowVisibleDisplayFrame(r);
int screen_height = rootview.getRootView().getHeight();
int keyboard_height = screen_height - (r.bottom + r.top) - discrepancy[0];
if (discrepancy[0] == 0) {
discrepancy[0] = keyboard_height;
if (keyboard_height == 0) discrepancy[0] = 1;
}
int margin_bottom = keyboard_height + Helper.getDp(10, activity);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) carousel_container.getLayoutParams();
params.setMargins(0, 0, 0, margin_bottom);
//boolean visible = heightDiff > screenHeight/3;
}
});
當聽衆第一次調用它測量屏幕無鍵盤,如果有差異我佔了它下一次。如果沒有差異,我將差異設置爲1,以便它不再爲0。
後搜索的時間我找到了解決辦法如果你想設置windowSoftInput="adjustPan"
這裏是代碼片段:
final View root = findViewById(android.R.id.content);
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
Rect r = new Rect();
{
root.getWindowVisibleDisplayFrame(r);
}
@Override
public void onGlobalLayout() {
Rect r2 = new Rect();
root.getWindowVisibleDisplayFrame(r2);
int keyboardHeight = r.height() - r2.height();
if (keyboardHeight > 100) {
root.scrollTo(0, keyboardHeight);
}
else {
root.scrollTo(0, 0);
}
}
});
在此代碼後,我發現鍵盤的高度我滾動視圖直到沒有被鍵盤覆蓋,這是找到鍵盤高度的主要原因。
按照docs:
void getWindowVisibleDisplayFrame(Rect outRect)
:檢索其中窗口這一觀點被附着到已被放置在整個可見顯示尺寸
檢查出這個...的http:// stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android –
你想要鍵盤嗎?然後cocos2d-x已經包含了你可以在Test Classes - > TextInput中檢查的android keyBoard他們在cocos2d-x中使用android鍵盤...檢查它是否可以幫助您 – user1201239
謝謝我會檢查 –