【问题标题】:Android EditText Multiline with SoftInputMode adjustPanAndroid EditText Multiline with SoftInputMode adjustPan
【发布时间】:2012-01-08 00:57:22
【问题描述】:

我有一个活动来编辑一些文本,顶部栏是滚动视图内多行模式下的 EditText 视图。在底部另一个带有 2 个按钮的视图。我想要实现的是在编辑底部栏位于软键盘下方的文本时。在清单中使用 android:windowSoftInputMode="adjustPan" 很容易。问题是如果edittext变得足够大,有几行,在编辑顶栏时它会消失。这仅在使用 adjustPan 模式时发生。但最糟糕的是,我认为这是一个错误,当光标位于 edittext 视图的末尾并使用 D-Pad 操纵杆向上滚动时,所有布局都被拉到顶部。

这是没有焦点在 EditText 上的屏幕:http://i.stack.imgur.com/pFadV.png

当滚动出现错误时,会发生这种情况:http://i.stack.imgur.com/eS8PP.png

我的布局如下:

   <?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>

如果我在 android:windowSoftInputMode 中使用 adjustResize 一切正常,但在编辑时底部栏将可见,这是我不希望发生的。我认为这个滚动问题是一个 Android 错误。任何帮助将不胜感激!

【问题讨论】:

    标签: android android-layout android-edittext


    【解决方案1】:

    底部的按钮也有同样的问题。经过几天的谷歌搜索,我发现这是由于丢失了

      android:isScrollContainer="false"
    

    在滚动视图中。

    Android 文档提到这个

    如果视图将用作滚动容器,则设置此项,意味着 它可以调整大小以缩小其整体窗口,以便 输入法的空间。

    编辑: 还要检查这个Answer

    【讨论】:

    • 感谢您的回复,但使用方向键滚动时它仍然会出现奇怪的行为。
    • 其实我没有在D-pad中测试过这段代码,但是其他设备没有显示相同的。
    • 我唯一的问题是在使用方向键滚动时并且只有在显示软键盘时。除此之外,是的,这个解决方案有效,但错误仍然存​​在。
    猜你喜欢
    • 2017-06-23
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多