Android EditText Multiline with SoftInputMode adjustPan

霸气de小男生 提交于 2019-12-06 23:56:52

问题


I have an activity to edit some text with a top bar a EditText view in multiline mode inside a scrollview. At the bottom another view with 2 buttons. What I wanted to achieve is when editing the text that bottom bar would be below the softkeyboard. That is easy using android:windowSoftInputMode="adjustPan" in the manifest. The problem is if the edittext becomes big enough with several lines, when editing the topbar it disappears. This only occurs when using adjustPan mode. But the worst and I think it's a bug, its when the cursor is at the end of the edittext view and scrolling up using the D-Pad joystick all the layout is pulled to the top.

This is the screen without focus on the EditText: http://i.stack.imgur.com/pFadV.png

When the bug occurs with the scrolling, this happens: http://i.stack.imgur.com/eS8PP.png

My layout is the following:

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/BackgroundGray"
    android:gravity="top|center"
    android:orientation="vertical"
    android:windowSoftInputMode="adjustPan" >

    <RelativeLayout
        android:id="@+id/top_bar"
        android:layout_width="fill_parent"
        android:layout_height="45dip"
        android:layout_alignParentTop="true"
        android:background="@drawable/top_bar"
        android:focusable="true"
        android:focusableInTouchMode="true" >

        <ImageView
            android:id="@+id/bar_item_priority"
            android:layout_width="4dip"
            android:layout_height="34dip"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:contentDescription="@string/priority" />

        <EditText
            android:id="@+id/bar_title"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="6dip"
            android:background="@android:color/transparent"
            android:fadingEdge="vertical"
            android:gravity="center_vertical|left"
            android:hint="@string/default_title"
            android:inputType="text|textCapSentences"
            android:paddingLeft="10dip"
            android:textColor="#f3f3f3"
            android:textColorHint="#20ffffff"
            android:textSize="20dip"
            android:textStyle="bold" >
        </EditText>
    </RelativeLayout>

    <View
        android:id="@+id/main_top_bar_shadow"
        android:layout_width="fill_parent"
        android:layout_height="1dip"
        android:layout_below="@+id/top_bar"
        android:background="@color/TopBarShadow" />

    <LinearLayout
        android:id="@+id/meta_bar"
        android:layout_width="fill_parent"
        android:layout_height="25dip"
        android:layout_below="@+id/main_top_bar_shadow"
        android:background="#313435"
        android:descendantFocusability="blocksDescendants" >

        <TextView
            android:id="@+id/meta_date_modified"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|left"
            android:paddingLeft="10dip"
            android:paddingRight="10dip"
            android:paddingTop="6dip"
            android:shadowColor="#1d1d1d"
            android:shadowDx="1"
            android:shadowDy="1"
            android:shadowRadius="2"
            android:text="@string/default_date"
            android:textColor="#9d9d9d"
            android:textSize="12dip"
            android:textStyle="bold" >
        </TextView>
    </LinearLayout>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/bottom_bar"
        android:layout_below="@+id/meta_bar"
        android:fillViewport="true"
        android:scrollbarSize="2dip"
        android:scrollbarThumbHorizontal="@drawable/scrollbar"
        android:scrollbarThumbVertical="@drawable/scrollbar"
        android:scrollbars="vertical" >

        <view
            android:id="@+id/note"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:capitalize="sentences"
            class="home.greven.notes.NoteEditor$LinedEditText"
            android:fadingEdge="vertical"
            android:gravity="top"
            android:paddingBottom="8dip"
            android:paddingLeft="11dip"
            android:paddingRight="11dip"
            android:paddingTop="8dip"
            android:textSize="16sp" >
        </view>
    </ScrollView>

    <View
        android:id="@+id/bottom_bar_shadow"
        android:layout_width="fill_parent"
        android:layout_height="1dip"
        android:layout_above="@+id/bottom_bar"
        android:background="@color/TopBarShadow"
        android:focusable="false"
        android:focusableInTouchMode="false" />

    <LinearLayout
        android:id="@+id/bottom_bar"
        android:layout_width="fill_parent"
        android:layout_height="40dip"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bottom_buttons_bar"
        android:descendantFocusability="blocksDescendants" >

        <Button
            android:id="@+id/bottom_bar_button_plaintext"
            style="@style/NoteEditorButtonText"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="4dip"
            android:layout_weight="0.5"
            android:background="@drawable/small_blue_buttonstates"
            android:text="@string/plain_text" />

        <Button
            android:id="@+id/bottom_bar_button_checklist"
            style="@style/NoteEditorButtonText"
            android:layout_width="0.0dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="4dip"
            android:layout_weight="0.5"
            android:background="@drawable/small_gray_buttonstates"
            android:onClick="toChecklist"
            android:text="@string/checklist" />
    </LinearLayout>

</RelativeLayout>

If I use adjustResize in android:windowSoftInputMode everything works well but then the bottom bar will be visible when editing, something I didn't want to happen. I think this scrolling issue is an Android bug. Any help would be very appreciated!


回答1:


I do have the same problem with the button at the bottom. After days of googling i found this is due to the missing

  android:isScrollContainer="false"

in the ScrollView.

Android document mention this

Set this if the view will serve as a scrolling container, meaing that it can be resized to shrink its overall window so that there will be space for an input method.

Edit: Also check this Answer



来源:https://stackoverflow.com/questions/8774512/android-edittext-multiline-with-softinputmode-adjustpan

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