Cuộn trang khi bàn phím mềm bật lên


99

Tôi có một <ScrollView>bố cục:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

Như bạn thấy ở trên, bố cục đơn giản bao gồm ba trường nhập và một nút "Ok".

Tôi chạy ứng dụng của mình với bố cục trên, khi tôi chạm vào trường nhập thứ nhất ( @+id/input_one), bàn phím mềm sẽ bật lên từ cuối màn hình, nó ẩn trường nhập thứ 3 và nút "Ok".

Vì tôi sử dụng <ScrollView>, tôi nghĩ rằng tôi có thể cuộn trang lên để xem trường nhập liệu thứ 3 và nút "Ok" bị ẩn bởi bàn phím mềm, nhưng trang không thể cuộn được . Tại sao? Làm thế nào để thoát khỏi nó? về cơ bản, tôi muốn thấy mọi trường nhập và nút "Ok" ngay cả bàn phím mềm hiện lên.


1
loại bỏ <ScrollView>, LinearLayout sẽ là bố cục bên ngoài của bạn, nó sẽ hoạt động, tôi hy vọng ngay cả khi bàn phím mềm bật lên.
Abid A. Chaudhary

1
@pakshaheen Điều đó sẽ không khắc phục được sự cố khi cần phải có chế độ xem cuộn.
Luten

đây là mã làm việc. stackoverflow.com/questions/7417123/…
Venkat,

Câu trả lời:


125

Tôi cố định vấn đề bằng cách định nghĩa các thuộc tính sau trong <activity>của AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

12
Bạn không cần trạng thái Điều đó sẽ làm cho bàn phím mềm xuất hiện khi ứng dụng được khởi động ngay cả khi người dùng không tập trung vào một EditText
RajV

nó autometically mở bàn phím thậm chí không có EditText
Ông X

37

Ok, tôi đã tìm kiếm vài giờ để tìm ra vấn đề và tôi đã tìm thấy nó.

Không có thay đổi nào thích fillViewport="true"hoặc android:windowSoftInputMode="adjustResize"giúp tôi.

Tôi sử dụng Android 4.4 và đây là sai lầm lớn :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

Bằng cách nào đó, chủ đề Toàn màn hình ngăn ScrollViews cuộn khi SoftKeyboard hiển thị.

Hiện tại, tôi đã kết thúc bằng cách sử dụng cái này thay thế:

android:theme="@android:style/Theme.Black.NoTitleBar

Tôi không biết làm thế nào để loại bỏ thanh hệ thống trên cùng với hiển thị thời gian và pin, nhưng ít nhất tôi đã gặp sự cố.

Hy vọng điều này sẽ giúp những người khác có cùng vấn đề.

CHỈNH SỬA: Tôi có một chút giải pháp cho trường hợp của mình, vì vậy tôi đã đăng nó ở đây :

Tôi không chắc liệu điều này có hiệu quả với bạn hay không, nhưng nó chắc chắn sẽ giúp bạn hiểu và làm sáng tỏ một số điều.

EDIT2: Đây là một chủ đề hay khác sẽ giúp bạn đi đúng hướng hoặc thậm chí giải quyết vấn đề của bạn.


+1 Trong trường hợp của tôi, thanh trạng thái đã bị ẩn bởi lib của bên thứ ba trong mã: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de.

@qweret Điều gì sẽ xảy ra nếu tôi cần cả hai? Toàn màn hình và cuộn.
Prabs

@Prabs Bạn có tìm thấy giải pháp nào không? Tôi cũng muốn cả Toàn màn hình và cuộn.
Johny

@Johny Không. Hiện tại, tôi đang sử dụng toàn màn hình cho toàn bộ ứng dụng ngoại trừ hoạt động đó với cuộn 3.
Prabs

@Prabs Giải pháp duy nhất tôi nghĩ là có thanh trạng thái trong suốt nhưng trong trường hợp của tôi thì đó là một vấn đề vì tôi muốn hỗ trợ API> = 16. Bạn còn ý kiến ​​nào không?
Johny

20

Đối với tôi, điều duy nhất hoạt động được đưa vào hoạt động trong tệp kê khai này:

android:windowSoftInputMode="stateHidden|adjustPan"

Để không hiển thị bàn phím khi mở hoạt động và không chồng lên phần dưới cùng của chế độ xem.


14

đặt cái này bên trong Tệp kê khai của bạn như thế này ở Chế độ không toàn màn hình

android:windowSoftInputMode="stateVisible|adjustPan" 

trong bản kê khai của bạn

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

1
Tôi đã thử này nhưng unfrotunately, không may mắn chút nào ... Tuy nhiên, quan điểm gốc là không một ScrollView, nhưng một RelativeLayouttrong đó có một LinearLayoutmà sau đó có chứa mộtScrollView
James Heald


8

kiểm tra cái này.

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>

3

Điều này chỉ làm việc cho tôi:

android:windowSoftInputMode="adjustPan"

2

Ngoài ra, nếu bạn muốn làm điều đó theo chương trình, chỉ cần thêm dòng dưới đây vào onCreate của hoạt động.

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

1

Bạn có thể thử sử dụng mã sau để giải quyết vấn đề của mình:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

17
Bạn nên giải thích mã của mình làm gì thay vì chỉ đăng một đoạn mã khô khan như một câu trả lời.
Angel Politis

0

câu trả lời đơn giản nhất mà tôi đã thử chỉ là xóa mã của bạn để làm cho hoạt động ở chế độ toàn màn hình. Tôi có một mã như thế này chịu trách nhiệm làm cho hoạt động của tôi ở chế độ toàn màn hình:

if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

Tôi vừa xóa mã của mình và nó hoạt động hoàn toàn tốt mặc dù nếu bạn muốn đạt được điều này với chế độ toàn màn hình thì bạn sẽ phải thử một số phương pháp khá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.