我有一个奇怪的问题,我甚至没有表达出问题。
我的布局是一个相对布局,其中包含一个包含芯片和编辑文本的滚动视图。滚动视图下方是自动完成的列表视图,下面是一个包含编辑文本和按钮的线性布局。 (本帖末尾的截屏)。
当片段加载并且用户在滚动视图内键入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