วิธีย้ายเค้าโครงขึ้นเมื่อซอฟต์คีย์บอร์ดแสดง Android


85

ฉันมีหน้าจอเข้าสู่ระบบที่มีสองEditTextsปุ่มและปุ่มเข้าสู่ระบบในเค้าโครงของฉัน ปัญหาคือเมื่อฉันเริ่มพิมพ์แป้นพิมพ์แบบนิ่มจะปรากฏขึ้นและครอบคลุมปุ่มเข้าสู่ระบบ ฉันจะดันเค้าโครงขึ้นหรือเหนือแป้นพิมพ์เมื่อปรากฏขึ้นได้อย่างไร

ฉันไม่ต้องการใช้ a ScrollViewเพียงแค่ต้องการใช้งานโดยไม่ต้องเลื่อนลง กรุณาแนะนำวิธีการทำบางอย่างให้ฉัน ขอบคุณล่วงหน้า.

คำตอบ:


59

ตั้งค่าwindowSoftInputModeคุณสมบัติเป็นadjustPanและadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

33
วิธีนี้ไม่ได้ผล แต่เป็นการเปลี่ยนเพื่อให้<activity android:windowSoftInputMode="adjustResize"></activity>ใช้งานได้
nickiaconis

2
พูดถึง Android เวอร์ชันที่คุณใช้ คำตอบบางคำอาจไม่มีประโยชน์ในบางเวอร์ชัน
Josh

ตามที่ @nickiaconis กล่าวว่าฉันไม่ต้องการพารามิเตอร์ "adjustmentPan" และมันก็ใช้ได้สำหรับฉันขอบคุณ
danisupr4

มีเทียบเท่ากับโครงการพกพา Xamarin.Forms หรือไม่ ดังนั้นฉันจึงไม่ต้องทำสิ่งนี้สำหรับแต่ละแพลตฟอร์มเป้าหมาย
user20358

6
การตั้งค่าต้องเป็นค่าใดค่าหนึ่งที่แสดงในตารางต่อไปนี้หรือการรวมกันของค่า "สถานะ ... " หนึ่งค่าบวกค่า "ปรับ ... " หนึ่งค่า การตั้งค่าหลายค่าในกลุ่มใดกลุ่มหนึ่งเช่นค่า "สถานะ ... " หลายค่ามีผลลัพธ์ที่ไม่ได้กำหนดไว้ developer.android.com/guide/topics/manifest/…
EmJiHash

34

ลองใช้สิ่งนี้ในไฟล์รายการของ Android ที่ตรงกับกิจกรรม

<activity android:windowSoftInputMode="adjustPan"> </activity>

1
ความภักดีของฉันเลื่อนขึ้นครั้งแรก แต่เมื่อปิดแป้นพิมพ์และเปิดอีกครั้งไม่ขยับ
nabeghe

24

ใช้รหัสนี้ในonCreate()วิธีการ:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
ขอบคุณที่ช่วย <activity android: windowSoftInputMode = "adjustmentPan"> </activity> ไม่ได้ผลสำหรับฉันด้วยเหตุผลบางประการ
DH28

1
วิธีนี้ แต่ใช้SOFT_INPUT_ADJUST_RESIZEแทน ADJUST_PAN ได้ผลสำหรับฉัน
Voy

17

เท่านั้น

android:windowSoftInputMode="adjustResize"

ในแท็กกิจกรรมของคุณในไฟล์ Manifest จะทำเคล็ดลับ


ฉันใช้ ConstraintLayout วิธีนี้ใช้ไม่ได้กับฉัน
Karan Sharma

ในขณะที่เขียนคำตอบนี้ยังไม่มีการเพิ่ม ConstraintLayout ในเค้าโครงของ Android คุณสามารถค้นหาวิธีแก้ปัญหาอื่น ๆ ในหัวข้อนี้ที่เหมาะกับคุณที่สุด และแน่นอนฉันจะอัปเดตคำตอบของฉันสำหรับ ConstraintLayout เมื่อฉันได้รับเวลา ขอบคุณสำหรับการรายงาน
Bhargav Thanki


10

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


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

9
android:fitsSystemWindows="true"

เพิ่มคุณสมบัติในรูปแบบหลักของไฟล์เค้าโครงและ

android:windowSoftInputMode="adjustResize"

เพิ่มบรรทัดในไฟล์ Manifest.xml ของคุณบน Activty ของคุณ

มันเป็นงานที่สมบูรณ์แบบสำหรับฉัน


fitSystemWindows ไม่มีส่วนเกี่ยวข้องกับแป้นพิมพ์
Tim

@TimCastelijns ในกรณีของฉัน (กิจกรรมเต็มหน้าจอ) มันมีเรื่อง หากตั้งค่าเป็นfalseมุมมองจะไม่เลื่อนขึ้น
CoolMind

6

ใส่สิ่งนี้ในประกาศกิจกรรมของคุณในไฟล์รายการ <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

หรือถ้าคุณต้องการคุณสามารถเพิ่มใน onCreate () วิธีการของกิจกรรมของคุณ

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

2
รหัส Manifest ผิดวิธีนี้ไม่ได้กำหนดพฤติกรรม (คุณตั้งค่าความขัดแย้งสองค่าดู offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModedescription) @ kiwicomb123 เลือกพารามิเตอร์หนึ่งตัวมิฉะนั้นระบบจะเลือกให้คุณ (และตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในอุปกรณ์อื่น /
เวอร์ชัน


2

ตามคำแนะนำนี้วิธีที่ถูกต้องในการบรรลุเป้าหมายนี้คือการประกาศในรายการของคุณ:

<activity name="EditContactActivity"
        android:windowSoftInputMode="stateVisible|adjustResize">

    </activity>

ดูเหมือนว่า stateVisible จะเปิดขึ้นเมื่อกิจกรรมเริ่มต้นขึ้นดังนั้นจึงไม่จำเป็นต้องดันคีย์บอร์ดขึ้น
CodyEngel

2

เมื่อซอฟต์คีย์บอร์ดปรากฏขึ้นมันจะเปลี่ยนขนาดของเลย์เอาต์หลักและสิ่งที่คุณต้องทำคือสร้างตัวฟังสำหรับเลย์เอาต์หลักนั้นและภายในตัวฟังนั้นให้เพิ่มโค้ดscrollT0(x,y)เพื่อเลื่อนขึ้น


2

หากคุณกำลังทำงานกับ xamarin คุณสามารถใส่รหัสนี้ WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizeในแอตทริบิวต์กิจกรรมของคลาส MainActivity ตัวอย่างเช่นตอนนี้แอตทริบิวต์กิจกรรมจะมีลักษณะดังนี้

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }

2

ฉันแก้ปัญหานี้โดยการเพิ่มรหัสลงในรายการ:

<activity android:name=".Login"
        android:fitsSystemWindows="true"
        android:windowSoftInputMode="stateHidden|adjustPan"
</activity>

สมบูรณ์แบบ fitSystemWindows ทำงานให้ฉัน
Bawa

1

คุณควรใช้

android:windowSoftInputMode="adjustPan|stateHidden"

ในAndroidManifest.xmlไฟล์ของคุณที่คุณกำลังประกาศกิจกรรมของคุณ สิ่งนี้จะปรับเนื้อหาเค้าโครงของคุณเมื่อแป้นพิมพ์แสดงในเค้าโครง


0

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


0

การทำงานนี้เป็นเหมือนเสน่ห์สำหรับฉัน

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

-2

สิ่งนี้จะได้ผลสำหรับคุณอย่างแน่นอน

android: windowSoftInputMode = "ปรับแพน"


1
ช่วยเพิ่มคำอธิบายได้ไหม ... ?
chevybow

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