2017-04-14 174 views
1

我正在開發一個角流星應用程序,每次我將焦點放在屏幕底部的一個輸入上,鍵盤與它重疊。移動鍵盤上的輸入重疊

我嘗試添加這對我的移動config.js但不工作:

App.setPreference('fullscreen', false); 
App.setPreference('android-windowSoftInputMode', 'adjustResize'); 

而且也是這個元在我的index.html:

<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, target-densitydpi=device-dpi, width=device-width" /> 

我是不是忘了什麼東西?

+0

你達到了一個解決方案?我有相同的設置,並渴望使它工作! – Roshdy

+0

找不到任何東西,sz –

+0

我做了一個工作hacky的解決方法,如果你有興趣,讓我知道這裏發佈 – Roshdy

回答

0

所以你有兩個Android的選擇(iOS處理它對你來說好一點)。在您的AndroidManifest.xml文件中,您會在第一個<activity>標籤內看到android:windowSoftInputMode。這將調整鍵盤與屏幕交互的方式。 Here是關於它如何工作的更多信息。

+0

所以我理解它應該是adjustPan,而不是adjustResize(不知道爲什麼人們會推薦這個)。無論如何我都試過,也不管用。 在流星我已經在我的應用程序根移動config.js。這是我應該改變的。在.meteor/local/cordova-build上我找到了config.xml(由第一個參數生成)。在最後一個platform/android/AndroidManifest.xml中生成一個,但是我找不到最後一個在第一個參數上添加的這個參數 –

+0

我也嘗試將這個屬性直接添加到AndroidManifest。 xml(我知道我不應該編輯這個,這只是一個嘗試),但該應用程序不編譯 –

+0

@DanielRodriguez我對Meteor不太熟悉 - 是的,你應該直接將這個屬性添加到AndroidManifest.xml文件,儘管我不知道Meteor如何處理這個問題 –

1

這對我來說幾乎適用於所有情況。

此代碼路徑下:

── client 
   ├── main.js 

// Global variables 
let keyboardHeight = 0, originalHeight = 0; 

Meteor.startup(() => { 
    if(Meteor.isCordova){ 
     StatusBar.hide(); 

     // ionic plugin defaults to hide it 
     cordova.plugins.Keyboard.hideKeyboardAccessoryBar(false); 

     // Android specific events 
     isAndroid = cordova.platformId == 'android'; 
     if(isAndroid){ 
      // Handle android backbutton 
      document.addEventListener("backbutton", onBackButtonDown, false); 

      // Using ionic-plugin-keyboard 
      window.addEventListener("native.keyboardshow", onShowKeyboard, false); 
      window.addEventListener("native.keyboardhide", onHideKeyboard, false); 
     } 
    } 
}; 
onShowKeyboard = function(e){ 
    let elem = document.activeElement,  // Get the focused element 
     $parent = $(elem).scrollParent(); // Get closest scrollable ancestor (jQuery UI) 

    // If there is no scrollable parent, no need to continue processing 
    if($parent.length == 0){ 
     return; 
    } 

    // Check if the keyborad type has changed (i.e. from text to number) 
    if(keyboardHeight != e.keyboardHeight){ 
     keyboardHeight = e.keyboardHeight; 
    } 

    // Don't resize if the original height hasn't been reset by onHideKeyboard() 
    if(originalHeight == 0){ 
     originalHeight = $parent.height(); 
    } 

    // Subtract keyboard height from parent height + accessory bar height 
    // Add some class to the parent, to be able to get it back to normal state onHideKeyboard() 
    $parent.height(originalHeight - keyboardHeight + 50).addClass('adjusted'); 

    // Give the keyboard time to show 
    setTimeout(function() {  
     // Scroll to active element 
     document.activeElement.scrollIntoView({ 
      behavior: "smooth", // or "auto" or "instant" 
      block: "center"  // or "start" or "end" 
     }); 
    }, 100); 

    // Unbind DOM object from HTML for garbage collection 
    elem = null; 
    $parent.prevObject = null; // To avoid memory leak (for any jQuery DOM object) 
    $parent = null; 
}; 
onHideKeyboard = function(e){ 
    let s = $('.adjusted').attr('style'); 
    s = s.replace(/height.*;/, ''); 
    $('.adjusted').attr('style', s).removeClass('adjusted'); 
    keyboardHeight = 0; 
    originalHeight = 0; 
};