ScrollView两个EditTexts焦点问题

时间:2016-03-21 20:09:37

标签: android android-layout

我有一个奇怪的问题,我甚至没有表达出问题。

我的布局是一个相对布局,其中包含一个包含芯片和编辑文本的滚动视图。滚动视图下方是自动完成的列表视图,下面是一个包含编辑文本和按钮的线性布局。 (本帖末尾的截屏)。

当片段加载并且用户在滚动视图内键入edittext时,会弹出带有自动完成选项的列表视图。选择自动完成选项时,将其添加为选定芯片。生成这些芯片的库不会清除编辑文本的焦点,但有些东西会慢慢操作系统将焦点移到底部编辑文本。这导致奇怪的状态,两个编辑文本闪烁,就好像他们有焦点。如果用户再次开始在键盘上打字,则焦点实际上是在较低的编辑文本上,现在无法再次关注第一个编辑文本以进行输入。

NonFocusingScrollView的代码如下。这正确地解决了我的问题,ChipsView周围的滚动视图抓住焦点并阻止编辑文本正常工作。 (布局中的SevenChipsView只是ChipsView)的扩展名。

我已尝试以编程方式从较低的编辑文本中删除焦点,并将其明确地放回滚动视图中的编辑文本中,但这并没有做任何事情。

有没有办法可以阻止操作系统转移焦点,并保留在顶部编辑文本中,直到用户点击底部编辑文本?

public class NonFocusingScrollView extends ScrollView {
    public NonFocusingScrollView(Context context) {
        super(context);
    }

    public NonFocusingScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NonFocusingScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public NonFocusingScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
        return true;
    }

    @Override
    public ArrayList getFocusables(int direction) {
        return new ArrayList();
    }

    @Override
    public void requestChildFocus(View child, View focused) {
        // avoid scrolling to focused element all together
    }
}

布局XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:id="@+id/messaging_announcement_recipient_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@color/screen_background"
        android:orientation="horizontal"
        android:padding="8dip">

        <TextView
            style="@style/default_textview"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginEnd="8dip"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="8dip"
            android:layout_marginStart="0dp"
            android:gravity="center_vertical"
            android:text="@string/recipient_to"
            android:textColor="@android:color/white" />

        <com.sevenshifts.android.views.NonFocusingScrollView
            android:id="@+id/messaging_announcements_recipients_scroll_view"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:padding="0dp">

            <com.sevenshifts.android.views.SevenChipsView 
                android:id="@+id/messaging_announcements_recipients"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="0dp"
                android:textColor="@android:color/white"
                app:cv_bg_color_clicked="@color/primary"
                app:cv_color_clicked="@color/primary"
                app:cv_icon_placeholder="@drawable/ic_house" />
        </com.sevenshifts.android.views.NonFocusingScrollView>

    </LinearLayout>

    <se.emilsjolander.stickylistheaders.StickyListHeadersListView
        android:id="@+id/messaging_announcements_recipient_autocomplete"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/messaging_announcement_recipient_container"
        android:visibility="gone" />

    <LinearLayout
        android:id="@+id/messaging_announcements_compose_post_container"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="8dip"
        android:layout_marginRight="8dip"
        android:minHeight="44dip"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/messaging_announcement_post_text"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="@string/announcement_hint"
            android:inputType="textMultiLine|textCapSentences|textAutoCorrect"
            android:maxLines="5" />

        <Button
            android:id="@+id/messaging_announcement_post_button"
            android:layout_width="80dp"
            android:layout_height="44dip"
            android:background="@null"
            android:text="@string/send"
            android:textColor="@color/primary" />
    </LinearLayout>

    <include layout="@layout/component_loading" />

</RelativeLayout>

屏幕截图流程在这个imgur画廊中 - 太多了,不能挤满这篇文章:http://imgur.com/a/zWY0D

0 个答案:

没有答案