Cách di chuyển bố cục lên khi bàn phím mềm được hiển thị android


85

Tôi có một màn hình đăng nhập với hai EditTextsvà một nút đăng nhập trong bố cục của tôi. Vấn đề là khi tôi bắt đầu nhập, bàn phím mềm hiển thị và che nút đăng nhập. Làm cách nào để tôi có thể đẩy bố cục lên hoặc lên trên bàn phím khi nó xuất hiện?

Tôi không muốn sử dụng a ScrollView, chỉ muốn triển khai nó mà không cần cuộn xuống. Xin vui lòng, gợi ý cho tôi một số cách để làm điều đó. Cảm ơn trước.

Câu trả lời:


59

Đặt thuộc windowSoftInputModetính thành adjustPanadjustResize

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

32
Điều này không hiệu quả, nhưng hãy thay đổi nó để <activity android:windowSoftInputMode="adjustResize"></activity>nó hoạt động.
nickiaconis

2
Đề cập đến phiên bản Android bạn đang sử dụng. Một số câu trả lời có thể hoàn toàn vô dụng trên một số phiên bản.
Josh

như @nickiaconis nói, tôi không cần tham số 'adjustPan' và nó làm việc cho tôi, cảm ơn bạn
danisupr4

Có dự án di động Xamarin.Forms nào tương đương không? vì vậy tôi không phải làm điều này cho từng nền tảng mục tiêu riêng lẻ.
user20358

6
Cài đặt phải là một trong các giá trị được liệt kê trong bảng sau hoặc kết hợp của một giá trị "trạng thái ..." với một giá trị "điều chỉnh ...". Đặt nhiều giá trị trong một trong hai nhóm - ví dụ: nhiều giá trị "trạng thái ..." - có kết quả không xác định. developer.android.com/guide/topics/manifest/…
EmJiHash

34

Hãy thử điều này trong tệp kê khai android tương ứng với hoạt động.

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

1
Lyout của tôi di chuyển lên lần đầu tiên, nhưng khi đóng bàn phím và mở lại, không di chuyển.
nabeghe

24

Sử dụng mã này trong onCreate()phương pháp:

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

1
Cảm ơn, điều đó đã giúp. <activity android: windowSoftInputMode = "AdjustPan"> </activity> không hoạt động với tôi vì một số lý do.
DH28

1
Phương pháp này, nhưng sử dụng SOFT_INPUT_ADJUST_RESIZEthay vì ADJUST_PAN, đã hiệu quả với tôi
Voy

16

chỉ có

android:windowSoftInputMode="adjustResize"

trong thẻ hoạt động của bạn bên trong tệp Tệp kê khai sẽ thực hiện thủ thuật


Tôi đang sử dụng ConstraintLayout, giải pháp này không phù hợp với tôi.
Karan Sharma

Tại thời điểm viết câu trả lời này, ConstraintLayout chưa được thêm vào bố cục Android. Bạn vui lòng tìm bất kỳ giải pháp nào khác trên chủ đề này phù hợp với bạn nhất. Và chắc chắn tôi sẽ cập nhật câu trả lời của mình cho ConstraintLayout khi tôi có thời gian. Cám ơn báo cáo
Bhargav Thanki

12

Đặt dòng này vào thời gian khai báo hoạt động trong tệp kê khai.xml

<android:windowSoftInputMode="adjustPan">

10

Bằng cách nào đó tôi đã đạt được điều này bằng cách biết tình trạng của bàn phím mềm trên thiết bị. tôi di chuyển bố cục đến vị trí y khi bàn phím được hiển thị và di chuyển trở lại vị trí ban đầu khi không được hiển thị. điều này hoạt động tốt, tuân theo nguyên tắc này.


2
Tôi có thể di chuyển bố cục lên khi bàn phím hiển thị, nhưng không thể di chuyển về vị trí ban đầu trong khi bảng phím ẩn, bạn có thể giúp tôi trong việc này.
Kishore

9
android:fitsSystemWindows="true"

thêm thuộc tính vào bố cục chính của tệp bố cục và

android:windowSoftInputMode="adjustResize"

thêm dòng vào tệp Manifest.xml trên Activty của bạn

công việc hoàn hảo của nó đối với tôi.


fitsSystemWindows có gì để làm với bàn phím
Tim

@TimCastelijns, trong trường hợp của tôi (hoạt động toàn màn hình) thì có vấn đề. Nếu được đặt thành false, các lượt xem sẽ không tăng lên.
CoolMind,

6

Đặt điều này vào khai báo hoạt động của bạn trong tệp kê khai <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

hoặc nếu muốn, bạn có thể thêm phương thức onCreate () vào hoạt động của mình

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

1
Mã kê khai sai, hành vi theo cách này là không xác định (bạn đặt hai giá trị xung đột, hãy xem offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModemô tả). @ kiwicomb123, hãy chọn một tham số hoặc hệ thống sẽ chọn cho bạn (và lựa chọn này có thể thay đổi trên thiết bị khác / API verision)
kpower

3

Đây là tất cả những gì cần thiết:

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

2

Theo dõi hướng dẫn này , cách chính xác để đạt được điều này là khai báo trong tệp kê khai của bạn:

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

    </activity>

Có vẻ như trạng thái có thể mở ra khi hoạt động bắt đầu, vì vậy không cần thiết phải thực sự đẩy bàn phím lên.
CodyEngel

2

Khi bàn phím mềm xuất hiện, nó sẽ thay đổi kích thước của bố cục chính và những gì bạn cần làm là tạo một trình lắng nghe cho bản phát chính đó và trong trình lắng nghe đó, hãy thêm mã scrollT0(x,y)để cuộn lên.


2

Nếu bạn đang làm việc với xamarin, bạn có thể đặt mã này WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizetrong thuộc tính hoạt động của lớp MainActivity. Ví dụ: bây giờ thuộc tính hoạt động sẽ giống như bên dưới

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

0

Sử dụng Bố cục tương đối, nó sẽ điều chỉnh chế độ xem để bạn có thể nhìn thấy chế độ xem đó trong khi nhập văn bản


0

Điều này làm việc như một sự quyến rũ đối với tôi

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

0

Bạn nên sử dụng

android:windowSoftInputMode="adjustPan|stateHidden"

trong AndroidManifest.xmltệp của bạn , nơi bạn đang khai báo hoạt động của mình. Thao tác này sẽ điều chỉnh nội dung bố cục của bạn, khi bàn phím được hiển thị trong bố cục.


-2

Điều này chắc chắn sẽ làm việc cho bạn.

android: windowSoftInputMode = "AdjustPan"


1
Bạn có thể thêm một số giải thích ...?
chevybow

Chỉ cần vào file và AndroidManifest.xml của bạn và thẻ này để hoạt động mà bạn muốn di chuyển lên trên bàn phím bật lên
Sanjay Kumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.