2012-06-29 19 views
9

बारे में पता होना मैं web page with jquery terminal और छिपे हुए पाठ क्षेत्र (है कि ट्रिगर एंड्रॉयड वर्चुअल कीबोर्ड) है, मैं अक्षरों को टाइप कर सकते हैं लेकिन जब मैं कुछ आदेशों में प्रवेश सामग्री वर्चुअल कीबोर्ड के पीछे छिपा है। टर्मिनल सामग्री नीचे स्क्रॉल कर रही है क्योंकि जब मैं कुछ और कमांड टाइप करता हूं तो यह स्क्रॉलिंग होता है। जब मैं अपने फोन स्क्रॉलिंग में हार्डवेयर कीबार्ड का उपयोग करता हूं तो सही है (टच स्क्रॉल अभी तक काम नहीं कर रहा है)।वेबपृष्ठ सकते हैं एंड्रॉयड वर्चुअल कीबोर्ड

मैं

.terminal .clipboard { 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    opacity: 0.01; 
    filter: alpha(opacity = 0.01); 
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.01); 
    width: 2px; 
} 
.cmd > .clipboard { 
    position: fixed; 
} 

prevoius और प्लगइन में इस कोड के लिए इस सीएसएस

.terminal textarea { top: 0; width:0; margin-left: -8px; pointer-events: none; } 

जोड़ा (पाठ क्षेत्र क्लिपबोर्ड के लिए इस्तेमाल किया गया था)।

self.click(function() { 
    self.find('textarea').focus(); 
}); 

और मेरे qestion यह है: जावास्क्रिप्ट पता लगा सकते हैं कितना बड़ा वर्चुअल कीबोर्ड है? या शायद वेबपृष्ठ के आकार को बदलने का दूसरा तरीका है, इसलिए यह केवल दृश्य भाग (कीबोर्ड कहां नहीं है) में है? या शायद मेरे कोड में कुछ गड़बड़ है, इसे मोबाइल पर काम करने के लिए डिज़ाइन नहीं किया गया था। कुंजीपटल का आकार हमेशा एक ही है, भले ही उपयोगकर्ता अलग से एक को स्थापित करता है?

उत्तर

2

से मैं क्या देखा है, जब आभासी कीबोर्ड पॉप अप, पेज आकार नहीं बदला है (छोटे दृश्य-क्षेत्र, पर आभासी कीबोर्ड के साथ दिखाई फिट करने के लिए)। तो यह आपके पृष्ठ को संकेत नहीं देगा कि कीबोर्ड चालू है या नहीं। और मुझे सच में नहीं लगता कि उस जानकारी को पाने का दूसरा तरीका भी है।

आप एक सेटअप कर सकते हैं जहां आप उपयोगकर्ता एजेंट को देखते हैं, और यदि यह एंड्रॉइड फोन के लिए है, तो जब उपयोगकर्ता विभिन्न टेक्स्ट इनपुट तत्वों पर क्लिक करता है, तो आप वर्चुअल कीबोर्ड के लिए स्क्रीन के नीचे कुछ कमरा बनाते हैं।

कीबोर्ड के आकार के लिए, स्टॉक एंड्रॉइड के पास मानक आकार या अनुपात या प्रतिशत हो सकता है, लेकिन इस तथ्य के साथ संयुक्त है कि वहां कई एंड्रॉइड मोड हैं और यह तथ्य है कि कई स्क्रीन संकल्प और स्क्रीन हैं इसके अनुपात में अनुवाद करने के लिए कोई निश्चित संख्या नहीं है (जैसे कुंजीपटल x पिक्सेल लंबा या स्क्रीन संपत्ति का वाई प्रतिशत है)। हालांकि, आप एक सामान्य धारणा धारणा कर सकते हैं कि नीचे स्क्रीन पर लगभग आधा स्क्रीन लगती है।

तो मूल रूप से, उपयोगकर्ता एजेंट, स्क्रीन रिज़ॉल्यूशन और तथ्य यह है कि उपयोगकर्ता ने टेक्स्ट इनपुट फ़ील्ड पर "क्लिक किया" है, तो आप एक अच्छा विचार प्राप्त कर सकते हैं कि वर्चुअल कीबोर्ड प्रदर्शित होता है या नहीं, और कितना कमरा इसके लिए छोड़ने के लिए।

+1

मुझे समझ में नहीं आता कि यह स्वीकार्य उत्तर क्यों है .. मुझे पता है कि एसओ एक योग्यता है, और मुझे खुशी है कि यह है, लेकिन मैं वास्तव में एक तरीका बताता हूं जिसमें आप वर्चुअल कीबोर्ड के आकार को ढूंढ सकते हैं (या बेहतर भी: गतिविधि के उपलब्ध स्क्रीन स्पेस का आकार) मेरे जवाब में। इसके अलावा मैं कार्यान्वयन पर कुछ वैकल्पिक विचार भी प्रस्तुत करता हूं, क्योंकि कीबोर्ड को पाने के लिए "अदृश्य दृश्य" जैसी सामग्री का उपयोग करना कम से कम कहने के लिए थोड़ा हैकी लगता है। मैं कम से कम परवाह नहीं कर सकता था कि मेरा स्वीकार्य उत्तर नहीं है, लेकिन अब सवाल जो कोई भी पढ़ता है, आईएमओ, गलत जवाब पढ़ेगा। – baske

+1

@baske शायद क्योंकि यह मूल ऐप के लिए जावा कोड के बजाए इसे वेबपृष्ठ के रूप में संबोधित करता है? शीर्षक पढ़ें। – boatcoder

+1

यदि आप मेरा जवाब दोबारा पढ़ते हैं, तो आप देखेंगे कि इसमें "मूल" (जावा) कोड शामिल है, हालांकि इस कोड का अंतिम उद्देश्य दृश्यमान विंडो के आकार को अपने वेबव्यू में जावास्क्रिप्ट कोड में पास करना है (loadUrl का उपयोग करके () तरीका)। सवाल यह था कि "क्या जावास्क्रिप्ट पता लगा सकता है कि वर्चुअल कीबोर्ड कितना बड़ा है?", और संक्षिप्त उत्तर "नहीं" है। लेकिन यह पता चला है कि आप जावा (देशी) कोड का उपयोग करके अनुरोधित आकार प्राप्त कर सकते हैं और इसे जावास्क्रिप्ट में पास कर सकते हैं, और मेरा जवाब बताता है कि कैसे .. – baske

0

आप जिस तरह से टर्मिनल सामग्री दिखाई रखने के लिए भी जब कुंजीपटल पॉप, आप कीबोर्ड आकार पता करने की जरूरत नहीं है की तलाश में हैं। समस्या आपकी "#shell" ऊंचाई में है। क्रोम (डेस्कटॉप) पर डेवलपर टूल्स खोलने और अपनी विंडो का आकार बदलने का प्रयास करें। आप देखेंगे कि "#shell" div की ऊंचाई हमेशा डिवाइस की ऊंचाई के लिए उपयुक्त है, सामग्री क्षेत्र की ऊंचाई नहीं। इसलिए, जब कीबोर्ड पॉप होता है, तो सामग्री कीबोर्ड के पिछड़े पर होगी। इसे काम करने के लिए, आपको सामग्री क्षेत्र में फ़िट होने के लिए अपनी "#shell" ऊंचाई को मजबूर करना चाहिए। मैं सीएसएस को संशोधित करने की कोशिश करता हूं और यह मेरे एंड्रॉइड एमुलेटर में ठीक से काम करता है। अपने पृष्ठ से touch-scroll js को भी हटाएं, यह अनावश्यक है। आप इस सीएसएस कोड को अपनी सीएसएस फ़ाइल में जोड़ सकते हैं।

#shell { 
    position: fixed !important; 
    top: 0; left: 0; 
    width: 100% !important; height: 100% !important; 
    margin: 0 !important; padding: 0 !important; 
    -webkit-transition: none !important; 
    -webkit-transform: none !important; 
    overflow-y: visible !important; 
} 

#shell .terminal-output, #shell .cmd { 
    margin: 10px; 
} 

इस सहायता की आशा करें।:)

+0

यह वास्तविक फोन पर काम नहीं करता है, जब मैं एंटर दबाता हूं तो नीचे वर्चुअल कीबोर्ड स्क्रॉल का उपयोग नहीं करता है लेकिन उंगली का उपयोग करके स्क्रॉल करना काम नहीं करता है। जब मैं 'स्थिति हटा देता हूं: निश्चित! महत्वपूर्ण; शीर्ष: 0; बाएं: 0; 'बाघ काम का उपयोग कर स्क्रॉलिंग लेकिन नीचे स्क्रॉल नहीं। और टर्मिनल अभी भी वर्चुअल कीबोर्ड से नीचे है। – jcubic

+0

तो क्षमा करें, मेरे पास अभी तक असली एंड्रॉइड फोन नहीं है। लेकिन यह एंड्रॉइड सिम्युलेटर और आईओएस सिम्युलेटर दोनों में ठीक से काम करता है। मुझे लगता है कि आपको क्या करना है सभी तत्व स्थिति (निश्चित या रिश्तेदार दोनों) को हटा दें और ब्लॉक डिस्प्ले को ब्लॉक करने के लिए सेट करें। फिर 'फ्लोट: बाएं;' को '। टर्मिनल, .cmd' पर सेट करें। Finaly, इनपुट पर ध्यान केंद्रित करने के लिए क्लिक और कुंजी घटना जोड़ें। किसी भी ओवरफ्लो को छिपाएं। धन्यवाद। –

4

1 आप android:windowSoftInputMode<activity> तत्व में Manifest.xml के भीतर विशेषता का उपयोग कर सकते हैं ताकि IME पॉप अप होने पर विभिन्न आकार बदलने वाली रणनीतियों में से चयन किया जा सके। इनमें शामिल हैं (सीमित नहीं):

adjustResize, जो शेष स्थान को फिट करने के लिए आपकी गतिविधि के सामग्री दृश्य (और इसमें वेबव्यू) का आकार बदल देगा।

adjustPan, जो आईएमई की विंडो द्वारा आंशिक रूप से प्रक्षेपित, पूरी स्क्रीन को भरने के लिए सामग्री दृश्य को छोड़ देगा।

इनके साथ बजाना आपको वह व्यवहार दे सकता है जिसे आप ढूंढ रहे हैं।

2 एंड्रॉइड का डिफ़ॉल्ट व्यवहार जब एक (वेब) स्क्रॉल करने की बात आती है तो देखें जब आईएमई पॉप अप होता है तो यह कर्सर को दृश्यमान रखने की कोशिश करता है। आपके मामले में आप एक छिपे हुए दृश्य पर अपना कर्सर (या: फोकस) डाल रहे हैं। यह आपके द्वारा देखे जाने वाले अजीब व्यवहार को बताता है और मुझे लगता है कि आप अपना कार्यान्वयन बदलना अच्छा करेंगे। आप पहली जगह एक दृश्यमान textarea का उपयोग क्यों नहीं कर रहे हैं? आपका पाठ कहीं खत्म होना होगा, है ना? और फिर एंड्रॉइड फोकस/स्क्रॉल स्वचालित रूप से संभाल लेंगे।

कामकाज के रूप में: कुछ ऐसा जो आप कोशिश कर सकते हैं वह है कि आप अपने छिपे हुए दृश्य को समय-समय पर समझें और अपनी सामग्री को साफ़ करें, जिससे आपकी स्क्रॉलिंग समस्या को कम किया जा सके। बेशक इस विकल्प की व्यवहार्यता आपके सटीक उपयोग मामले पर निर्भर करती है।

3 यह सवाल पूछ रहे का जवाब होगा, लेकिन मैं अनिश्चित कैसे इस (शायद एचटीएमएल के साथ मेरी अनुभवहीनता की वजह से) तुम्हारी मदद करेगा हूँ:

WebView की ऊंचाई प्राप्त करने के लिए (जो अपने प्रकट में

  • , अपने तत्व को android:windowSoftInputMode="adjustResize" विशेषता जोड़ें: - स्क्रीन का आकार IME ऊंचाई) अपने जावास्क्रिप्ट में निम्न कार्य करें। के लिए हाल में अपने layout.xml फ़ाइल में बनाया

    public class RelativeLayoutWithLayoutListener extends RelativeLayout { 
    
    public interface LayoutListener { 
        public void onLayout(); 
    } 
    
    private LayoutListener mListener; 
    
    public RelativeLayoutWithLayoutListener(Context context) { 
        super(context); 
    } 
    
    public RelativeLayoutWithLayoutListener(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle); 
    } 
    
    public RelativeLayoutWithLayoutListener(Context context, AttributeSet attrs) { 
        super(context, attrs); 
    } 
    
    public void setLayoutListener(LayoutListener aListener) { 
        mListener = aListener; 
    } 
    
    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
        super.onLayout(changed, l, t, r, b); 
        if (mListener != null) { 
         mListener.onLayout(); 
        } 
    } 
    } 
    
  • बाहर अपने पुराने लेआउट स्वैप:

  • इस तरह अपने बाहरी लेआउट का विस्तार।

  • अपने अभ्यास कोड में, कुछ इस तरह करते हैं:

    public class MainActivity extends Activity { 
    
    private RelativeLayoutWithLayoutListener mMainLayout; 
    
    private WebView mWebView; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        mMainLayout = (RelativeLayoutWithLayoutListener)findViewById(R.id.main_layout); 
    
        mMainLayout.setLayoutListener(new LayoutListener() { 
    
         @Override 
         public void onLayout() { 
          mWebView.loadUrl("javascript:setSize(" + mMainLayout.getWidth() + "," + mMainLayout.getHeight() + ")");    
         } 
        }); 
    
        mWebView = (WebView)findViewById(R.id.webview); 
    } 
    } 
    
loadUrl() में बेशक

फोन आप एक जावास्क्रिप्ट विधि आप परिभाषित फोन करना होगा। यदि आप पहले कुछ गणना करते हैं तो आप निश्चित रूप से आईएमई की ऊंचाई में भी गुजर सकते हैं।

संबंधित मुद्दे