键盘存在时调整ListView的大小

时间:2014-10-21 11:49:59

标签: android android-layout android-fragments android-listview

当存在软件键盘时,我在调整listview大小时遇到​​了一些问题。基本上我的我正在使用谷歌地图api,其中地图覆盖整个屏幕,透明的动作栏,我有一个车辆列表在地图上的片段从右侧滑入。当右面板显示时,整个布局如下所示:enter image description here

现在我正在使用android:windowSoftInputMode="adjustPan",所以当我专注于编辑文本和键盘幻灯片时,它看起来像这样:enter image description here

这不好,因为我无法看到整个车辆。我尝试过使用android:windowSoftInputMode="adjustResize",但由于我使用的是透明操作栏,因此会发生这种情况:enter image description here 我可以看到整个listView,它滚动得很好,但我的EditText现在在ActionBar下。基本上我想要实现的是两种情况的组合,所以它看起来像这样:enter image description here 现在这是我的列表

的片段布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    tools:context="hidden">

    <EditText
        android:id="@+id/vehicle_search_edit_text"
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:focusable="true"
        android:hint="Search"
        android:imeOptions="actionSearch"
        android:singleLine="true" />

    <ListView
        android:id="@+id/list_vehicles"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/vehicle_search_edit_text"
        android:animateLayoutChanges="true"
        android:fastScrollEnabled="true"
        />
</RelativeLayout>

这是我的MainActivity的布局

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/layout_root_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <RelativeLayout
        android:id="@+id/layout_root_vehicles"
        android:layout_width="350dp"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true" />

    <RelativeLayout
        android:id="@+id/layout_root_settings"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true" />

</RelativeLayout>

我熟悉设置布局的高度programaticaly,因为我已经在布局中使用了listfragment嵌套。 ActionBar必须保持透明,因为这是我老板想要的。我一整天都在寻找解决方案,但我发现的任何东西都不适合我,所以我会非常感谢你的帮助。

4 个答案:

答案 0 :(得分:3)

我相信,因为您的操作栏与Google地图使用的操作栏相似,所以通常由其占用的空间可以被其他布局(在您的情况下为片段)使用。您可以尝试为片段容器指定填充或边距,例如:

android:paddingTop="?android:attr/actionBarSize"

(操作栏的大小)。

一起
android:windowSoftInputMode="adjustResize"

这应该有效。

填充值不满足您,手动提供更合适的值。

答案 1 :(得分:0)

在您的清单文件中,在您的活动中添加android:windowSoftInputMode="adjustPan"。 例如,

<activity
            android:name="com.sample.ListViewsActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan" >
        </activity>

我认为,这解决了你的问题。试试吧。

答案 2 :(得分:0)

API说明如下 http://developer.android.com/reference/android/widget/ListView.html

TRANSCRIPT_MODE_ALWAYS_SCROLL =无论当前可见哪些项目,列表都会自动滚动到底部。

setTranscriptMode(int mode)=将列表或网格放入脚本模式。

请测试,看它是否有效!

setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

答案 3 :(得分:0)

在AndroidManifest.xml中添加:

<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize"/>
</activity> 

您的活动 并添加两个参数:

<ListView
android:stackFromBottom="true"
android:transcriptMode="normal"/>