नरम कीबोर्ड पॉप अप होने पर पृष्ठ स्क्रॉल करें


99

मेरे पास एक <ScrollView>लेआउट है:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

जैसा कि आप ऊपर देखते हैं, सरल लेआउट में तीन इनपुट फ़ील्ड और एक "ओके" बटन होता है।

मैं अपने एप्लिकेशन को उपरोक्त लेआउट के साथ चलाता हूं, जब मैं 1 इनपुट फ़ील्ड ( @+id/input_one) पर टैप करता हूं , तो सॉफ्ट कीबोर्ड स्क्रीन के नीचे से पॉप जाएगा, यह 3 इनपुट फ़ील्ड और "ओके" बटन को छुपाता है।

चूंकि मैं उपयोग करता हूं <ScrollView>, मुझे लगा कि मैं तीसरे इनपुट फ़ील्ड और "ओके" बटन को देखने के लिए पृष्ठ को स्क्रॉल कर सकता हूं जो कि नरम कीबोर्ड द्वारा छिपाए गए हैं , लेकिन पृष्ठ स्क्रॉल करने योग्य नहीं है । क्यों? मैं इससे छुटकारा कैसे पाऊं? मूल रूप से, मैं हर इनपुट फ़ील्ड और "ओके" बटन को देखना चाहता हूं, यहां तक ​​कि सॉफ्ट कीबोर्ड भी पॉप अप होता है।


1
<ScrollView> को हटा दें, LinearLayout आपका बाहरी लेआउट होना चाहिए, यह काम करेगा, मुझे उम्मीद है कि भले ही सोफबोर्डबोर्ड अप हो।
आबिद ए। चौधरी

1
@pakshaheen स्क्रॉल स्क्रॉल की आवश्यकता होने पर यह समस्या ठीक नहीं होगी।
लुटेन

यहाँ काम कोड है। stackoverflow.com/questions/7417123/…
वेंकट

जवाबों:


125

मैं में निम्न विशेषता को परिभाषित करते हुए समस्या का समाधान होने <activity>की AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

12
आपको राज्यविजय की आवश्यकता नहीं है। उपयोगकर्ता द्वारा किसी EditText पर ध्यान केंद्रित नहीं किए जाने पर भी ऐप लॉन्च होने पर सॉफ्ट कीबोर्ड दिखाई देगा
RajV

यह स्वचालित रूप से खुला कीबोर्ड है, यहां तक ​​कि एडिटेक्स भी नहीं है
मिस्टर एक्स

37

ठीक है, मैंने समस्या को खोजने के लिए अब कई घंटे खोजे हैं, और मैंने इसे पाया।

की तरह के किसी भी परिवर्तन fillViewport="true"या android:windowSoftInputMode="adjustResize"मुझे मदद की।

मैं एंड्रॉइड 4.4 का उपयोग करता हूं और यह बड़ी गलती है :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

किसी तरह, फुलस्क्रीन थीम को सॉफ्टकेयबोर्ड दिखाई देने पर स्क्रॉलव्यू को स्क्रॉल करने से रोकता है।

फिलहाल, मैंने इसके बजाय इसका उपयोग किया:

android:theme="@android:style/Theme.Black.NoTitleBar

मैं नहीं जानता कि समय और बैटरी प्रदर्शन के साथ शीर्ष सिस्टम बार से कैसे छुटकारा पाया जाए, लेकिन कम से कम मुझे समस्या मिली।

आशा है कि यह दूसरों को मदद करता है जिनके पास समान समस्या है।

संपादित करें: मुझे अपने मामले के लिए थोड़ा सा काम मिला, इसलिए मैंने इसे यहाँ पोस्ट किया :

मुझे यकीन नहीं है कि यह आपके लिए काम करेगा, लेकिन यह निश्चित रूप से आपको समझने में मदद करेगा, और कुछ चीजों को स्पष्ट करेगा।

EDIT2: यहां एक और अच्छा विषय है जो आपको सही दिशा में जाने या यहां तक ​​कि आपकी समस्या को हल करने में मदद करेगा।


+1 मेरे मामले में स्टेटस बार कोड में तीसरे पक्ष के परिवाद द्वारा छिपाया गया था: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de।

@qweret अगर मुझे दोनों की आवश्यकता है तो क्या होगा? पूर्ण स्क्रीन और स्क्रॉलिंग।
प्रॉप्स

@ प्रॉप्स क्या आपको कोई समाधान मिला? मैं भी फुल स्क्रीन और स्क्रॉलिंग दोनों चाहता हूं।
जॉनी

@ जॉनी नोप। अभी के लिए मैं स्क्रॉल 3 के साथ उस गतिविधि को छोड़कर पूरे ऐप के लिए पूर्ण स्क्रीन का उपयोग कर रहा हूं।
Prabs

@Prabs मेरे विचार से एकमात्र समाधान पारदर्शी स्थिति पट्टी है, लेकिन मेरे मामले में एक समस्या है क्योंकि मैं API> = 16 का समर्थन करना चाहता हूं। क्या तुम्हारे पास कोई विचार है?
जॉनी

20

मेरे लिए केवल एक चीज जो काम करती है वह गतिविधि में इस श्रद्धांजलि में प्रकट होती है:

android:windowSoftInputMode="stateHidden|adjustPan"

गतिविधि को खोलते समय कीबोर्ड नहीं दिखाना और दृश्य के नीचे ओवरलैप न करना।


14

इसे नो मेसफेस्ट मोड में अपने मेनिफेस्ट के अंदर रखें

android:windowSoftInputMode="stateVisible|adjustPan" 

आपके प्रकट में

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

1
मैंने ऐसा करने की कोशिश की है, लेकिन पूरी तरह से, कोई भी भाग्य नहीं है ... हालांकि, मूल दृश्य एक नहीं है ScrollView, लेकिन एक RelativeLayoutजिसमें एक है LinearLayoutतो एक शामिल हैScrollView
जेम्स हेडल

11

अपनी Manifestपरिभाषित windowSoftInputModeसंपत्ति में:

<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustNothing">

2
@JacobRas कृपया इस लिंक की जाँच करें: developer.android.com/reference/android/… इसका मूल्य "समायोजन" है :)
मोहम्मद एरसन

2
मुझे एक ही परेशानी है, लेकिन स्क्रॉलव्यू समायोजन के साथ काम नहीं करता है :(
नरेंद्र सिंह

8

इसकी जांच करो।

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>

3

यह केवल मेरे लिए काम किया:

android:windowSoftInputMode="adjustPan"

2

इसके अलावा, यदि आप प्रोग्रामेटिक रूप से ऐसा करना चाहते हैं, तो नीचे दी गई लाइन को गतिविधि के ऑनक्रिट में जोड़ें।

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );

1

अपनी समस्या को हल करने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

17
आपको यह समझाने की जहमत उठानी चाहिए कि एक उत्तर के रूप में सिर्फ ड्राई पीस कोड पोस्ट करने के बजाय आपका कोड क्या करता है।
एंजेल पोलिटिस

0

मैंने जो सबसे सरल उत्तर दिया है, वह है कि आप अपने कोड को हटा दें, जो गतिविधि को पूर्ण स्क्रीन पर ले जाता है। मेरे पास एक ऐसा कोड था जो मेरी गतिविधि को पूर्णस्क्रीन बनाने के लिए जिम्मेदार था:

अगर (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

मैंने अभी अपना कोड हटा दिया है और यह पूरी तरह से ठीक है, हालांकि यदि आप इसे अपनी पूर्णस्क्रीन के साथ प्राप्त करना चाहते हैं तो आपको कुछ अन्य तरीकों को आजमाना होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.