313

Tôi có một ngăn kéo trượt dọc ở dưới cùng của ứng dụng của tôi. Khi bàn phím mềm mở ra, nó sẽ đẩy tab cho ngăn kéo lên, để nó nằm trên bàn phím. Tôi thực sự muốn nó vẫn ở dưới cùng của màn hình, bị ẩn khi bàn phím được hiển thị.

Bất cứ ai khác chạy vào vấn đề này? Biết cách khắc phục?

|
547

Bạn chỉ có thể chuyển windowSoftInputModecờ Hoạt động của mình sang adjustPantrong AndroidMainfest.xmltệp bên trong thẻ hoạt động.

Kiểm tra các tài liệu chính thức để biết thêm.

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>
|
  • 1

    Tôi không muốn chế độ xem lia máy, tôi muốn nó giữ nguyên trạng thái tĩnh và chỉ cần che bàn phím bất cứ thứ gì nó sẽ che đi.

    – Bùi Thu Nga,Thúy Nga,Tố Nga,Tuyết Nga 23:41:39 17/11/2010
  • 1

    Bằng cách xoay, điều đó có nghĩa là chế độ xem sẽ được cuộn để hiển thị chế độ xem mà bạn đang nhập. Nói cách khác, nếu bàn phím vừa xuất hiện không che khuất tầm nhìn tập trung thì nó sẽ ở trạng thái tĩnh.

    – Tạ Thiện Minh 20:42:32 18/11/2010
  • 1

    Tôi đang đối mặt với vấn đề tương tự. làm cho cờ windowSoftInputMode thành "điều chỉnh" trong tệp kê khai. Nhưng không hoạt động. Làm thế nào để giải quyết nó

    – Lê Hằng Anh 10:23:31 31/05/2011
  • 1

    Không giúp ích gì trong trường hợp tôi có một hàng nút ở phía dưới màn hình và ScrollView phía trên chúng. Các nút được đẩy lên bất kể giá trị nào trong windowSoftInputMode.

    – Tạ Công Tráng 21:44:06 17/10/2011
  • 1

    Tôi thấy rằng phương pháp chung này hoạt động miễn là hoạt động của bạn không ở chế độ toàn màn hình

    – Lý Kim An 22:58:12 15/01/2015
144

Không có câu trả lời nào phù hợp với tôi, nhưng điều này đã tạo nên mánh khóe:

android:windowSoftInputMode="adjustNothing"
|
  • 1

    Điều này làm cho bàn phím xuất hiện lớp phủ nội dung, mà không tạo bố cục để tính toán lại chiều cao của nó.

    – Đỗ Thái Duy 09:40:43 04/06/2014
  • 1

    Điều này giải quyết vấn đề bàn phím đẩy nội dung lên mặc dù đó là điều tôi và OP muốn đạt được.

    – Dương Hà Yên 15:32:00 01/07/2014
  • 1

    mượn từ @Dom bạn có thể sử dụng getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);để đặt giá trị này theo chương trình

    – Bùi Ánh Hoa 05:32:09 18/09/2015
  • 1

    Câu hỏi này không phù hợp với tôi, không giống như các câu trả lời khác (thạch đậu 4.1)

    – Lý Ngọc Lệ 09:52:09 10/12/2015
  • 1

    Hoàn hảo! Nó cũng đang làm việc trong trường hợp của tôi. Tôi đang hiển thị một hộp thoại có một edittext bên trong. Ngay khi hộp thoại mở ra, bàn phím cũng xuất hiện. Tôi đã thử "điều chỉnh", nhưng nó bị chặn tính năng xuất hiện bàn phím. Vì vậy, "điều chỉnh" làm việc tốt hơn trong trường hợp của tôi.

    – Hồ Hữu Thiện 14:03:31 28/01/2016
72

Trong trường hợp của tôi, lý do các nút được đẩy lên là vì chế độ xem phía trên chúng là a ScrollViewvà nó bị sụp đổ với các nút được đẩy lên phía trên bàn phím cho dù android:windowSoftInputModetôi đang đặt giá trị nào .

Tôi đã có thể tránh hàng nút dưới cùng của mình bị bàn phím mềm đẩy lên bằng cách đặt android:isScrollContainer="false"trên nút ScrollViewnằm phía trên các nút.

|
  • 1

    Nhưng trong trường hợp này, bàn phím mềm che một phần màn hình và không có cách nào để cuộn xuống. Có vẻ như chỉ có một cách để ngăn bảng điều khiển phía dưới hiển thị ở đầu bàn phím - ẩn nó khi bàn phím đang mở ...

    – Lý Thu Nhiên 21:22:23 16/07/2012
  • 1

    đây là nó! Theo tôi, thiết lập này rất thú vị để nhận xét, như là cách duy nhất tôi đã tìm thấy để đạt được các hiệu ứng của tài sản bị thiếu "điều chỉnh"!

    – Tạ Kim Xuyến 23:52:48 03/03/2013
  • 1

    @Artem Russakovskii Tôi không biết bạn là ai, nhưng tôi yêu bạn vì giải pháp này. Cảm ơn rất nhiều.

    – Lý Minh Châu 14:56:43 12/01/2017
  • 1

    @Artem Russakovskii bạn vừa tiết kiệm cho tôi hàng giờ tìm kiếm. Cảm ơn bạn rất nhiều ...

    – Đặng Tùy Anh 16:05:56 05/12/2018
  • 1

    @Artem Russakovskii điều này hoạt động hoàn hảo. Cảm ơn rất nhiều.

    – Lý Diễm Phượng 10:15:26 18/01/2019
60

Bạn có thể cố gắng thêm thuộc tính này một cách linh hoạt, bằng cách đặt đoạn mã sau vào onCreatephương thức hoạt động của bạn:

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

Điều này làm việc cho tôi, thay vì:

android:windowSoftInputMode="adjustPan"

không

|
  • 1

    Bạn đã thêm android:windowSoftInputMode="adjustPan"AndroidManifest.xml chưa?

    – Tạ Linh Lan 11:11:11 29/04/2014
  • 1

    Không, vì nó không thực sự làm cho tôi bất kỳ sự khác biệt. Dòng mã đầu tiên đã thực hiện công việc. :) @HabeebPerwad

    – Dương An Chi 21:59:39 08/06/2014
  • 1

    Tôi đã thêm dòng giây trong tệp AndoidManifest.xml. Tôi nghĩ rằng sau đó chỉ có nó làm việc. nên cứ hỏi.

    – Lý Nam Phương 04:50:31 09/06/2014
  • 1

    @Dom, làm thế nào để sử dụng " getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);" trong một đoạn?

    – Hoàng Minh Vy 05:05:07 12/09/2014
  • 1

    Cuối cùng! Những công việc này! Tôi đã có một bộ điều khiển (mở rộng từ FragmentActivity) và một số khung nhìn được gắn vào nó (các khung nhìn mở rộng từ RelativeLayout). Vì vậy, trong quan điểm rắc rối tôi đã làm controller.getWindow()...như bạn nói. Hoạt động

    – Hoàng Thi Nhiên 21:25:56 20/07/2015
34

Những câu trả lời ở đây không giúp tôi. Vì vậy, tôi đã thử điều này:

android:windowSoftInputMode="adjustResize"

Điều này hoạt động như một cơ duyên, Bây giờ tiêu đề của ứng dụng của tôi không biến mất. Nó mượt mà hơn.

|
  • 1

    Điều này gần như hoạt động hoàn hảo cho tôi. Vấn đề duy nhất là thanh / hàng gợi ý của bàn phím vẫn che giấu bố cục của tôi. Bạn đã đối mặt với một vấn đề như vậy?

    – Bùi Nam Việt 07:35:35 29/08/2018
  • 1

    Tôi đã không phải đối mặt với vấn đề này. @Sufian

    – Thành Vũ 08:55:43 29/08/2018
  • 1

    Tôi đã không phải đối mặt với bất kỳ vấn đề sau đó. Bây giờ tôi không chắc chắn. @Sufian

    – Lý Phương Thi 11:43:46 29/08/2018
  • 1

    Đối với những người có thể phải đối mặt với vấn đề tương tự, nó có thể là do TabLayout. Vấn đề đã biến mất khi tôi đặt tầm nhìn của nó View.GONE. Có lẽ đã đến lúc thiết kế lại bố cục của tôi.

    – Đặng Thanh Hương 18:02:59 08/09/2018
9

Để thực hiện việc này theo chương trình trong một đoạn, bạn có thể sử dụng mã sau

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

Đặt cái này vào onResume ()

|
7

Đối với người dùng xamarin thêm mã này vào thuộc tính Activity của lớp MainActivity,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

hoặc bạn có thể thêm mã này Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)vào phương thức OnCreate của lớp MainActivity.

|
7

Dành cho độc giả tương lai.

Tôi muốn kiểm soát cụ thể vấn đề này, vì vậy đây là những gì tôi đã làm:

Từ một đoạn hoặc hoạt động, ẩn các chế độ xem khác của bạn (không cần thiết trong khi bàn phím lên), sau đó khôi phục chúng để giải quyết vấn đề này:

            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);

                    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    //ok now we know the keyboard is up...
                        view_one.setVisibility(View.GONE);
                        view_two.setVisibility(View.GONE);

                    }else{
                    //ok now we know the keyboard is down...
                        view_one.setVisibility(View.VISIBLE);
                        view_two.setVisibility(View.VISIBLE);

                    }
                }
            });
|
6

Chỉ cần một dòng duy nhất được thêm vào ...

Thêm android:windowSoftInputMode="stateHidden|adjustPan"vào hoạt động cần thiết của bạn manifest file.

Tôi vừa mới giải quyết :) :)

|
6

Cho đến nay, các câu trả lời không giúp ích gì cho tôi khi tôi có một nút và trường textInput (cạnh nhau) bên dưới textView bị ẩn bởi bàn phím, nhưng điều này đã giải quyết vấn đề của tôi:

android:windowSoftInputMode="adjustResize"
|
5
android:windowSoftInputMode="stateHidden|adjustNothing"

Mã này hoạt động.

|
5

Thêm mã sau vào 'hoạt động' của tệp kê khai.

android:windowSoftInputMode="adjustResize"
|
4

Đây là điều tốt nhất làm việc cho tôi

android:windowSoftInputMode="adjustNothing"

Thử nó!

|
3

Vâng, tôi đã xem những câu trả lời này nhưng trong trường hợp của tôi, tôi đã rơi vào cùng một vấn đề và đã quy y một giải pháp rất tiện dụng và dễ dàng nhất liên quan đến việc đưa một thuộc tính vô tội rất nhỏ vào thẻ Scrollview của bạn nằm trong tệp xml của bạn. Đó là

android:isScrollContainer="false"

Chúc may mắn!

|
2

Cái này làm việc cho tôi

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
|
2

Đối với Chế độ xem cuộn:

nếu sau khi thêm android:windowSoftInputMode="stateHidden|adjustPan"vào Bản kê khai Android của bạn mà vẫn không hoạt động.

Nó có thể bị ảnh hưởng vì khi bàn phím xuất hiện, nó sẽ ở chế độ xem cuộn và nếu nút / bất kỳ đối tượng nào của bạn không nằm trong chế độ xem cuộn của bạn thì các đối tượng sẽ theo bàn phím và di chuyển vị trí của nó.

Kiểm tra xml của bạn nơi nút của bạn và chắc chắn rằng nó nằm trong khung Xem cuộn của bạn và không nằm ngoài nó.

Hy vọng điều này sẽ giúp ra. : D

|
2

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

android:windowSoftInputMode="adjustPan"

Đây có thể là một giải pháp tốt hơn cho những gì bạn muốn.

|
1

@manifest trong hoạt động của bạn:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
|
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Đây là một trong những làm việc cho tôi.

|
1

Bao gồm trong tệp kê khai của bạn trong hoạt động mà bạn muốn hiển thị. Nhưng hãy đảm bảo không sử dụng Hoạt động toàn màn hình

android:windowSoftInputMode="adjustPan"
|
1

Trong trường hợp của tôi, tôi cần bàn phím bị ẩn và ngay sau khi nhấp vào nút, bố cục của tôi cần được điều chỉnh, vì vậy tôi chỉ cần thêm lệnh này trong tệp kê khai và nó đã siêu đúng.

android:windowSoftInputMode="stateHidden|adjustResize"
|
1

Mã này có thể giúp bạn. Sử dụng nó trong oncreatephương pháp của bạn .

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
  • 1

    Tôi đã thử điều này nhưng tôi gặp vấn đề trong đó chế độ xem cắt bỏ một chút phần dưới cùng của chế độ xem và đẩy chế độ xem để che lấp thời gian ở trên? Bất kỳ ý tưởng về những gì thay đổi bố trí hoặc những gì cần thiết? stackoverflow.com/questions/39909897/

    – Dương Nam Lộc 06:47:39 07/10/2016
1

Hãy thử sử dụng cái này:

android:windowSoftInputMode="stateHidden|adjustPan"
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.