Bàn phím mềm Android bao gồm trường EditText


Câu trả lời:


163

Bạn đang hỏi làm thế nào để kiểm soát những gì có thể nhìn thấy khi bàn phím mềm mở ra? Bạn có thể muốn chơi với windowSoftInputMode . Xem tài liệu dành cho nhà phát triển để thảo luận thêm.


2
Điều này hoạt động tốt, nhưng hãy đảm bảo bạn có <item name = "android: windowIsFloating"> true </ item> trong kiểu hộp thoại của bạn, trong trường hợp bạn đang sử dụng kiểu hộp thoại tùy chỉnh.
Dmitry Chistyakov

Có vẻ như điều này không hoạt động ở chế độ ngang (Nexus 7), yếu tố có thể chỉnh sửa được ẩn dưới bàn phím. Tôi đã thử các kết hợp khác nhau của windowSoftInputMode. Có vẻ như tôi không thể thiết lập windowIsFloating vì ActionBar sẽ không hỗ trợ nó. Hoặc nó cũng có thể có liên quan đến thực tế là EditText của tôi nằm trong mục xem danh sách?
Sampo Sarrala - codidact.org

Điều này sẽ không hoạt động sau khi thêm <item name = "android: windowTranslucentStatus"> true </ item> trong chúng. Có ai sửa cái này không?
Tối đa

1
@Max Thêm vào android:fitsSystemWindows="true"chế độ xem gốc của bạn để giải quyết điều này.
David Passmore

1
Điều gì sẽ kéo bố cục đầy đủ phía trên bàn phím khi bàn phím mềm có sẵn bất kể điều gì giống như whatsapp ....
Karue Benson Karue

162

Tôi đã có vấn đề tương tự. Hãy thử mã sau:

android:windowSoftInputMode="adjustPan"

thêm nó vào tệp kê khai của bạn trong thẻ hoạt động của hoạt động chứa đầu vào. thí dụ:

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

14
Câu trả lời đơn giản nhất! Cũng như một ghi chú, điều này cần phải được thêm vào trong tệp kê khai và theo hoạt động mà chúng tôi muốn.
NRR

4
Trong trường hợp của tôi, điều này ít nhất không làm xáo trộn html của tôi, như adjustResizethường làm, nhưng nó cũng bao gồm các trường đầu vào của tôi
Rahul Dole

8
Điều này không giúp tôi
vikifor

1
@vikifor, đảm bảo bạn thêm edittext của bạn vào scrollview. Ngay cả khi bạn chỉ có 3-4 trường trong bố cục của mình, hãy thêm tất cả các trường của bạn vào cuộn xem. Điều này làm cho nó có thể cuộn khi bàn phím ảo mở.
Kuldeep Sakhiya

Hoạt động tốt, nhưng bất cứ khi nào tôi chạm vào giao diện EditText, bàn phím sẽ được vẽ lại.
Iqbal

55

Tôi gặp vấn đề tương tự khi bảng phím mềm nằm trên cùng của chế độ xem Chỉnh sửa được đặt ở dưới cùng của màn hình. Tôi đã có thể tìm ra giải pháp bằng cách thêm một dòng vào hoạt động có liên quan của tệp AndroidManifest.xml của mình.

android:windowSoftInputMode="adjustResize|stateHidden"

Đây là cách toàn bộ thẻ hoạt động trông như thế nào:

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

Ở đây giá trị quan trọng nhất là điều chỉnhResize. Điều này sẽ chuyển toàn bộ UI lên để nhường chỗ cho bảng phím mềm.


Nhưng điều này có thể làm rối tung giao diện html của bạn nếu css của bạn có hầu hết các giá trị tỷ lệ phần trăm
Rahul Dole

Bạn đang đoán ở đây hay bạn đã thử nó? btw nó không nên làm rối html của bạn. Tôi đã thử với các trang web xem xét. Nó sẽ được thay đổi toàn bộ khung nhìn chứ không phải các yếu tố riêng lẻ.
DanKodi

1
Tôi đã thử nó. Tôi nghĩ điều đó xảy ra bởi vì css của tôi có hầu hết các giá trị phần trăm
Rahul Dole

@DanKodi Tôi đã thử adjustResize|stateHiddenvà nó không tạo ra sự khác biệt nào adjustPan.
IgorGanapolsky

25

Tại sao không thử thêm ScrollView để bọc bất cứ thứ gì bạn muốn cuộn. Đây là cách tôi đã thực hiện, trong đó tôi thực sự để một tiêu đề trên đầu mà không cuộn, trong khi các tiện ích hộp thoại (đặc biệt là EditTexts) cuộn khi bạn mở bàn phím mềm.

<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>

Tôi thường sẽ có một linearLayout bên trong ScrollView, nhưng điều đó tùy thuộc vào bạn. Ngoài ra, cài đặt kiểu Thanh cuộn thành bên ngoài giúp, ít nhất là trên các thiết bị của tôi.


4
Trong khi câu trả lời của Mayra là những gì mọi người nên làm (và có lẽ là những gì Google nghĩ mọi người nên làm), đây là điều tôi cuối cùng làm gần như mọi lúc. Đó là cách duy nhất để có được sự kiểm soát thực sự cần thiết để làm cho màn hình chính xác. Thở dài.
Scott Biggie

đừng đánh giá thấp bình luận của Scott. Đúng rồi. trong trường hợp của tôi, tôi không muốn thay đổi kích thước hoặc xoay danh sách của mình, nhưng muốn đưa lên chỉnh sửa ở cuối danh sách đó. Vì vậy, tôi đã đặt editText trong scrollView và nó hoạt động như mong đợi.
Darpan

15

Tất cả bạn cần làm là

android:isScrollContainer="true"

nguồn: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


1
Mặc dù bản thân câu trả lời không giúp tôi nhiều (không cần thuộc tính), nhưng nguồn được liên kết chứa phần giải thích đầy đủ (biểu mẫu nên được nhúng trong ScrollView). Cảm ơn!
johndodo

Tương tự như vậy, không có gì trên trang giúp tôi nhưng liên kết hiển thị thêm điều chỉnhResize vào hoạt động WindosSoftInputMode và điều đó đã hoạt động.
steven smith

14

Xin lỗi vì đã phục hồi một chủ đề cũ nhưng không ai đề cập đến cài đặt android:imeOptions="flagNoFullscreen"trong phần tử EditText của bạn


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

hoạt động cho android EditText, trong khi nó không hoạt động cho webview hoặc xwalkview. Khi bàn phím mềm ẩn đầu vào trong webview hoặc xwalkview bạn đã sử dụngandroid:windowSoftInputMode="adjustResize"


4

Tôi tin rằng bạn có thể làm cho nó cuộn bằng cách sử dụng trackball, có thể đạt được bằng lập trình thông qua các phương pháp lựa chọn, nhưng đó chỉ là một ý tưởng. Tôi biết rằng phương pháp trackball thường hoạt động, nhưng về cách chính xác để làm điều này và làm cho nó hoạt động từ mã, tôi không chắc chắn.
Mong rằng sẽ giúp.


Những gì tôi nghĩ rằng tôi cần là một cách để làm cho cửa sổ "nhân tạo" dài hơn để chế độ xem có thể cuộn. Hiện tại RelativeLayout được đặt thành android: layout_creen = "quấn_content" android: layout_height = "quấn_content"
Alexis

Tôi không biết về một giải pháp sau đó. Có lẽ bạn có thể muốn điều chỉnh thủ công các giá trị chiều rộng và chiều cao cho phù hợp với nhu cầu của mình, bằng cách kéo dài chúng hơn nữa đến mức "quấn_content" đang giải quyết.
Luis Miguel Serrano

1

thêm dòng đơn này vào hoạt động tương đối của bạn trong đó bìa bàn phím chỉnh sửa phương thức hoạt động của text.inside onCreat ().

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

0

Tôi biết điều này là cũ nhưng không có giải pháp nào ở trên làm việc cho tôi. Sau khi gỡ lỗi rộng rãi, tôi đã tìm ra vấn đề. Giải pháp là đặt android:windowTranslucentStatusthuộc tính thành false trong tệp style.xml của tôi


0

Nếu Trường Chỉnh sửa được bao phủ bởi KeyBoard Sử dụng mã sau:

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

Nếu bạn muốn Con trỏ ở trong Chỉnh sửa tập trung hơn là sử dụng EditText.requestFocus()sau khi EditText?.getParent()?.requestChildFocus(EditText,EditText) giúp lấy tiêu điểm và Con trỏ trong Chỉnh sửa tập trung.


-1

Chỉnh sửa AndroidManifest.xml của bạn

android:windowSoftInputMode="adjustResize"

Thêm phần này vào chế độ xem gốc của tệp Bố cục.

android:fitsSystemWindows="true"

Đó là tất cả.

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.