2012-07-02 30 views
56

Tôi đã tìm kiếm ở khắp mọi nơi để tìm giải pháp cho vấn đề của mình nhưng không thể tìm thấy câu trả lời. Đây là vấn đề.Đẩy nội dung lên khi nhấp vào văn bản chỉnh sửa

Tôi có một bố cục trông như thế này

Image is here

Bây giờ khi tôi nhấp vào chỉnh sửa văn bản (thanh tìm kiếm) i muốn những điều sau xảy ra

Image is here

Các mềm bàn phím về cơ bản cần phải đẩy lên toàn bộ nội dung màn hình để thanh tìm kiếm ở trên cùng và danh sách xem của nó nằm bên dưới nó để khi nội dung được tìm kiếm, kết quả được hiển thị. Tôi đã thử đặt android:windowSoftInputMode="adjustPan" thành Activity trong tệp kê khai nhưng điều này không hoạt động. Tôi đặt chế độ xem cuộn làm vùng chứa chính trong bố cục chính chứa các đoạn nhưng điều đó cũng không hoạt động. Tôi đã thử thêm văn bản chỉnh sửa (thanh tìm kiếm) làm tiêu đề cho chế độ xem danh sách nhưng điều này cũng không hoạt động. Mỗi lần bàn phím đẩy lên văn bản chỉnh sửa nhưng bao phủ chế độ xem danh sách. Có cách nào để thực hiện công việc này không?

Trả lời

67

Trên thực tế nếu bạn muốn toàn bộ bố trí của bạn pan lên hơn bạn nên sử dụng:

SOFT_INPUT_ADJUST_PAN

ý nghĩa:

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

này sẽ giữ cho bàn phím đóng và khi mở ra nó sẽ đẩy bạn toàn bộ hoạt động.

+2

Bạn thật tuyệt vời! – Eenvincible

+0

Nhưng bố cục đẩy lên khi nhập ký tự đầu tiên vào hộp chỉnh sửa. – Nivedh

+4

'adjustpan' đang hoạt động tốt nhưng đồng thời, tôi cũng muốn các nút ở dưới cùng được đặt trên bàn phím (về cơ bản là đạt được bằng cách sử dụng' adjustResize' nhưng sau đó nó không đẩy toàn bộ bố cục lên trên bất cứ ai có thể giúp đỡ? – driftking9987

7

Hãy thử android:windowSoftInputMode="adjustResize" trong tệp kê khai của bạn.

Bạn có thể cần phải làm android:windowSoftInputMode="adjustResize|adjustPan" ... Tôi không thực sự có bất cứ điều gì có thể so sánh để thiết lập của bạn để thử nghiệm trên ...

Vấn đề của bạn là becasue này (từ các tài liệu cho adjustPan, tôi nhấn mạnh) :

Cửa sổ chính của hoạt động không được định lại kích thước để nhường chỗ cho bàn phím mềm . Thay vào đó, các nội dung của cửa sổ sẽ được tự động gay gắt để các trọng tâm hiện nay không bao giờ bị che khuất bởi bàn phím và sử dụng luôn có thể nhìn thấy những gì họ đang gõ

Cho rằng, danh sách của bạn đang được che khuất becasue sự EditText ở trên cùng có tiêu điểm. Điều duy nhất tôi có thể nghĩ là di chuyển EditText để nó nằm dưới danh sách. Sau đó, khi được đẩy lên, danh sách của bạn sẽ vẫn hiển thị phía trên EditText.

+0

Cảm ơn bạn đã trả lời. Tôi đã thử điều đó, đã không làm việc. Kích thước lại hoạt động nhưng nó làm cho nội dung được xếp ở phía trên cùng của màn hình và trông rất tệ, nội dung listview cũng không được hiển thị khi điều chỉnh được sử dụng. – Neil

+0

Cập nhật câu trả lời của tôi, không phải là giải pháp thực sự, nhưng có thể giải quyết được. – Barak

+0

Hi Barak Tôi đã thử di chuyển EditText bên dưới listview nhưng điều này không hoạt động. Tôi cũng nghĩ rằng nó nên nhưng nó chỉ đẩy EditText qua listview và giấu tất cả các nội dung của listview. – Neil

3

Tôi không thể tìm thấy giải pháp để bố cục thay đổi tự động vì vậy tôi phải hack nó. Tôi đã sử dụng mã mà tôi đã tìm thấy here trong hoạt động chính của mình để phát hiện khi bàn phím được mở. Tôi chỉ cần thêm mã để gọi một phương thức ẩn hai phần trên cùng của tôi khi bàn phím được mở. Đây không phải là những gì tôi muốn làm nhưng nó hoạt động.

8

Tôi gặp vấn đề tương tự, giải pháp rất đơn giản.

Nếu chủ đề trong hoạt động được đặt là Toàn màn hình @android:style/Theme.Holo.NoActionBar.FullScreen, bàn phím không đẩy nội dung lên.

Sau khi tôi thay đổi hoạt động thành @android:style/Theme.Holo.NoActionBar, bàn phím hiện đang đẩy nội dung hoạt động lên.

+0

Cảm ơn bạn! Nhưng bạn có biết cách đặt nó ở chế độ toàn màn hình không? –

+0

Tôi cũng muốn toàn màn hình và thậm chí nội dung hoạt động không được tăng lên. Bất kì giải pháp nào? – Nikita

19

Điều này có thể được sử dụng trong Lớp phân đoạn để di chuyển văn bản Chỉnh sửa lên và Cuộn đến cuối.

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

Điều này sẽ hoạt động chắc chắn nếu chủ đề Hoạt động phân đoạn của bạn không ở chế độ toàn màn hình.

Hy vọng điều này sẽ hữu ích!

+0

hoạt động tốt, nhưng bố cục đẩy lên khi nhập ký tự đầu tiên vào hộp chỉnh sửa. giải quyết thế nào? Vui lòng cho tôi biết nếu bạn biết – siva

+0

@siva Tôi cũng phải đối mặt với cùng một vấn đề – Nivedh

+0

Đã làm việc! Cảm ơn rất nhiều – dearvivekkumar

10

Điều này phù hợp với tôi.

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

tôi sử dụng này cho EditText đăng nhập của tôi:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Một số lưu ý về phương pháp này:

this là đề cập đến bối cảnh, như getActivity() không phải lúc nào cũng thích hợp hơn

.SOFT_INPUT_STATE_HIDDEN //for default hidden state when activity loads 

.SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

Hoạt động mọi lúc!

9

Hãy thử điều này

android:windowSoftInputMode="adjustResize" 

làm việc cho tôi.

3

này đã làm việc cho tôi, cho mảnh, chỉ cần khai báo nó trong Manifest với các hoạt động:

android:windowSoftInputMode="adjustPan" 

Good Luck!

+0

Tôi có một số scroolviews và bố trí tương đối bên trong scrollview nơi xem edittext của tôi. Điều này chắc chắn làm việc. Tôi nghĩ tôi sẽ phải đặt nó trong mọi văn bản, hóa ra điều này rất đơn giản, hehe. ♥ –

0

Nếu ai vẫn còn phải đối mặt với vấn đề này:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:id="@+id/view" 
    **android:fitsSystemWindows="true"** 
    android:layout_height="match_parent"> 

thêm trong cách bố trí của bạn:

android:fitsSystemWindows="true" 

Tôi hy vọng điều này giải quyết vấn đề của bạn - nó làm việc cho tôi.

Các vấn đề liên quan