คีย์บอร์ดนุ่มของ Android ครอบคลุมฟิลด์ EditText


คำตอบ:


163

คุณกำลังถามว่าจะควบคุมสิ่งที่มองเห็นได้เมื่อเปิดคีย์บอร์ดอ่อนหรือไม่? คุณอาจต้องการที่จะเล่นกับwindowSoftInputMode ดูเอกสารนักพัฒนาซอฟต์แวร์สำหรับการสนทนาเพิ่มเติม


2
ใช้งานได้ดี แต่ให้แน่ใจว่าคุณมี <item name = "android: windowIsFloating"> true </item> ในสไตล์การโต้ตอบของคุณในกรณีที่คุณใช้สไตล์การโต้ตอบที่กำหนดเอง
Dmitry Chistyakov

ดูเหมือนว่าสิ่งนี้จะไม่ทำงานในโหมดแนวนอน (Nexus 7) องค์ประกอบที่แก้ไขได้จะยังคงซ่อนอยู่ภายใต้แป้นพิมพ์ ฉันลองใช้ windowSoftInputMode หลายแบบรวมกัน ดูเหมือนว่าฉันไม่สามารถตั้งค่าหน้าต่างกำลังโหลดได้เพราะ ActionBar จะไม่สนับสนุน หรืออาจมีบางอย่างเกี่ยวข้องกับข้อเท็จจริงที่ว่า EditText ของฉันอยู่ในรายการมุมมองรายการ
Sampo Sarrala - codidact.org

สิ่งนี้จะไม่ทำงานหลังจากเพิ่ม <item name = "android: windowTranslucentStatus"> true </item> ในตัวฉัน มีใครแก้ไขได้ไหม
สูงสุด

1
@ Max เพิ่มไว้android:fitsSystemWindows="true"ในมุมมองรูตของคุณเพื่อแก้ไขปัญหานี้
David Passmore

1
จะดึงเลย์เอาต์แบบเต็มรูปแบบเหนือแป้นพิมพ์ได้อย่างไรเมื่อมีคีย์บอร์ดนุ่ม ๆ ให้เลือกใช้ไม่ว่าจะเป็น
Whatsapp แบบ

162

ฉันมีปัญหาเดียวกัน ลองรหัสต่อไปนี้:

android:windowSoftInputMode="adjustPan"

เพิ่มไปยัง manifest.xml ของคุณในแท็กกิจกรรมของกิจกรรมที่เก็บอินพุต ตัวอย่าง:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />

14
คำตอบที่ง่ายที่สุด! เช่นเดียวกับการบันทึกสิ่งนี้จะต้องเพิ่มในไฟล์รายการและภายใต้กิจกรรมที่เราต้องการ
NRR

4
ในกรณีของฉันอย่างน้อยนี่ก็ไม่ทำให้ HTML ของฉันยุ่งเหมือนที่เคยadjustResizeทำ แต่มันยังครอบคลุมถึงช่องป้อนข้อมูลของฉันด้วย
Rahul Dole

8
สิ่งนี้ไม่ได้ช่วยฉันเลย
vikifor

1
@vikifor ให้แน่ใจว่าคุณเพิ่ม edittext ของคุณลงใน scrollview แม้ว่าคุณจะมีเพียง 3-4 ฟิลด์ในเลย์เอาต์ของคุณให้เพิ่มฟิลด์ทั้งหมดลงใน scrollview ทำให้สามารถเลื่อนได้เมื่อเปิดคีย์บอร์ดเสมือน
Kuldeep Sakhiya

ทำงานได้ดี แต่เมื่อใดก็ตามที่ฉันแตะที่มุมมอง EditText แป้นพิมพ์จะถูกวาดใหม่
อิกบัล

55

ฉันมีปัญหาเดียวกันกับที่แผงปุ่มกดอยู่ด้านบนของมุมมอง EditText ซึ่งวางไว้ที่ด้านล่างของหน้าจอ ฉันสามารถค้นหาวิธีแก้ไขได้ด้วยการเพิ่มบรรทัดเดียวในกิจกรรมที่เกี่ยวข้องของไฟล์ AndroidManifest.xml

android:windowSoftInputMode="adjustResize|stateHidden"

นี่คือลักษณะของแท็กกิจกรรมทั้งหมด:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

ค่าที่สำคัญที่สุดคือการปรับขนาด สิ่งนี้จะเลื่อน UI ทั้งหมดขึ้นเพื่อให้มีที่ว่างสำหรับ softkeyboard


แต่นี่อาจทำให้รูปลักษณ์ของ html ของคุณยุ่งเหยิงถ้า css ของคุณมีค่าเป็นเปอร์เซ็นต์
Rahul Dole

คุณคาดเดาที่นี่หรือคุณลอง? btw ไม่ควรเลอะ HTML ของคุณ ฉันได้ลองใช้ webviews แล้ว มันจะเปลี่ยนมุมมองทั้งหมดไม่ใช่องค์ประกอบแต่ละรายการ
DanKodi

1
ฉันลองแล้ว ฉันคิดว่ามันเกิดขึ้นเพราะ CSS ของฉันมีค่าเปอร์เซ็นต์เป็นส่วนใหญ่
ราหุลโดล

@DanKodi ฉันพยายามและมันไม่ได้สร้างความแตกต่างจากส่วนใดadjustResize|stateHidden adjustPan
IgorGanapolsky

25

ทำไมไม่ลองเพิ่ม ScrollView เพื่อตัดสิ่งที่คุณต้องการเลื่อน นี่คือวิธีที่ฉันทำมันโดยที่ฉันปล่อยให้ส่วนหัวอยู่ด้านบนซึ่งไม่เลื่อนในขณะที่วิดเจ็ตข้อความโต้ตอบ

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

ฉันมักจะมี LinearLayout ภายใน ScrollView แต่นั่นก็ขึ้นอยู่กับคุณ นอกจากนี้การตั้งค่าสไตล์แถบเลื่อนไปที่ด้านนอกจะช่วยให้อย่างน้อยบนอุปกรณ์ของฉัน


4
ในขณะที่คำตอบของ Mayra คือสิ่งที่ทุกคนควรทำ (และอาจเป็นสิ่งที่ Google คิดว่าทุกคนควรทำ) นี่คือสิ่งที่ฉันทำเกือบทุกครั้ง เป็นวิธีเดียวที่จะได้รับการควบคุมจริงที่จำเป็นในการทำให้การแสดงผลถูกต้อง ถอนหายใจ
Scott Biggs

อย่าประมาทความคิดเห็นของ Scott มันเป็นเรื่องจริง ในกรณีของฉันฉันไม่ต้องการปรับขนาดหรือเลื่อนมุมมองรายการของฉัน แต่ต้องการแก้ไข text ที่ท้ายรายการ ดังนั้นฉันใส่ editText ใน scrollView และทำงานตามที่คาดไว้
Darpan

15

สิ่งที่คุณต้องทำคือ

android:isScrollContainer="true"

แหล่งที่มา: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


1
ในขณะที่คำตอบนั้นไม่ได้ช่วยอะไรฉันมากนัก (ไม่จำเป็นต้องมีแอตทริบิวต์) แหล่งข้อมูลที่เชื่อมโยงมีคำอธิบายที่สมบูรณ์ (ควรฝังฟอร์มใน ScrollView) ขอบคุณ!
johndodo

ในทำนองเดียวกันไม่มีอะไรในหน้าช่วยฉัน แต่ลิงค์แสดงเพิ่มการปรับขนาดให้กับกิจกรรม windosSoftInputMode และที่ทำงาน
steven smith

14

ขออภัยสำหรับการคืนค่าเธรดเก่า แต่ไม่มีใครพูดถึงการตั้งค่าandroid:imeOptions="flagNoFullscreen"ในองค์ประกอบ EditText ของคุณ


7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

ใช้งานได้กับ android EditText ในขณะที่ใช้งานไม่ได้กับ webview หรือ xwalkview เมื่อคีย์บอร์ดอ่อนซ่อนอินพุตใน webview หรือ xwalkview ที่คุณใช้android:windowSoftInputMode="adjustResize"


4

ฉันเชื่อว่าคุณสามารถเลื่อนดูได้โดยใช้แทร็กบอลซึ่งอาจทำได้โดยการเขียนโปรแกรมผ่านวิธีการเลือกในที่สุด แต่เป็นเพียงความคิด ฉันรู้ว่าวิธีแทร็กบอลมักจะใช้งานได้ แต่สำหรับวิธีที่แน่นอนในการทำสิ่งนี้และทำให้มันใช้งานได้จากโค้ดฉันไม่แน่ใจ
หวังว่าจะช่วย


สิ่งที่ฉันคิดว่าฉันต้องการคือหนทางที่จะทำให้หน้าต่าง "ดุ้งดิ้ง" ได้นานขึ้นเพื่อให้มุมมองสามารถเลื่อนได้ ขณะนี้ RelativeLayout ถูกตั้งค่าเป็น android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis

ฉันไม่ทราบวิธีแก้ปัญหาแล้ว บางทีคุณอาจต้องการปรับค่าความกว้างและความสูงด้วยตนเองเพื่อให้เหมาะกับความต้องการของคุณโดยขยายไปยังสิ่งที่ "wrap_content" กำลังแก้ไข
Luis Miguel Serrano

1

เพิ่มบรรทัดเดียวนี้ไปยังกิจกรรมที่เกี่ยวข้องของคุณโดยที่แผงปุ่มกดครอบคลุมแก้ไข text.inside onCreat () วิธีการของกิจกรรม

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

0

ฉันรู้ว่านี่เก่า แต่ไม่มีวิธีการใดที่ได้ผลสำหรับฉัน หลังจากตรวจแก้จุดบกพร่องอย่างกว้างขวางฉันก็พบปัญหา วิธีแก้ปัญหาคือการตั้งค่าandroid:windowTranslucentStatusคุณลักษณะเป็นเท็จในสไตล์ของฉัน xml


0

หากเขตข้อมูล EditText ได้รับการครอบคลุมโดย KeyBoard ให้ใช้รหัสต่อไปนี้:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

หากคุณต้องการให้เคอร์เซอร์อยู่ใน Focused EditText กว่าการใช้งาน EditText.requestFocus()หลังจากEditText?.getParent()?.requestChildFocus(EditText,EditText) ที่ช่วยให้ได้รับโฟกัสและเคอร์เซอร์ใน Focused EditText


-1

แก้ไข AndroidManifest.xml ของคุณ

android:windowSoftInputMode="adjustResize"

เพิ่มสิ่งนี้ไปยังมุมมองรูทของไฟล์เค้าโครง

android:fitsSystemWindows="true"

นั่นคือทั้งหมดที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.