Gradient background gets white when closing keyboard (only when list view has items)

痴心易碎 提交于 2019-12-11 08:59:17

问题


I have a gradient that covers the whole background of my layout. However when I close the software keyboard it takes about 1 second for the gradient to resize to full height. This produces the white background you see in the picture below.

I thought of doing something like

android:windowSoftInputMode="adjustPan"

however this would be bad practice because a big part of the list view would be hidden under the keyboard. The gradient:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    android:useLevel="false" >
    <gradient
        android:startColor="#0d2d70"
        android:endColor="#007dbc"
        android:useLevel="false"
        android:type="linear"
        android:angle="45" />
</shape>

The layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gradient"
    android:padding="20dp" >

    <!-- input field is here -->

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_licence"
        android:divider="#FFFFFF"
        android:dividerHeight="1dp"
        android:padding="5dp"
        android:scrollbarStyle="outsideOverlay" >
    </ListView>


</RelativeLayout>

Any ideas how to prevent the white space?


回答1:


I've solved my problem. Instead of setting the background drawable for every activity, I set it in styles.xml like this

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowBackground">@drawable/gradient</item>
</style>

The white space disappears.




回答2:


it seems that the view is not getting invalidated after keyboard exits. Though i am not sure about the actual issue. I would suggest you to invalidate the view manually via code. Like,

container.invalidate();

http://developer.android.com/reference/android/view/View.html#invalidate()



来源:https://stackoverflow.com/questions/19544390/gradient-background-gets-white-when-closing-keyboard-only-when-list-view-has-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!