我有这个奇怪的“虫子”。在scrollview中更改其backgroundcolor的按钮会使scrollview向上滚动。
布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/img_loading" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:id="@+id/txt_read_story_title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:id="@+id/txt_read_story_author"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:id="@+id/txt_read_story_content"
/>
<include layout="@layout/inc_reactions_buttons" />
</LinearLayout>
</ScrollView>
</android.support.constraint.ConstraintLayout>
在inc_reactions_buttons.xml布局中,水平线性布局中有六个按钮。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal">
<ImageView
android:id="@+id/btn_funny"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_reaction_funny" />
...
</LinearLayout>
在这个按钮的OnClickListener中,我更改了它们的启用和backgroundColor
mBtnLove.setEnabled(false);
mBtnLove.setBackground(Color.parseColor("#FF000000"))
问题是当单击一个按钮时,scrollView会滚动到顶部。 如果我删除setBackground,则不会发生滚动。 我已经尝试过使用其他类型的视图(ImageView,ImageButton),但结果是一样的。 发生在API 25和26上(未在早期版本上测试)
任何人都知道原因吗?
由于
答案 0 :(得分:0)
好的,找到了解决方案。
正如我在上面的评论中所述,问题是由TextViews将属性“textIsSelectable”设置为True引起的。目前尚不清楚原因(调用requestChildFocus的东西),但我找到了解决方法。在我的按钮代码中,我将textIsSelectable属性设置为false,然后更改按钮的backgroundColor,然后将textIsSelectable重置为true。
任何人都有更好的选择吗?
答案 1 :(得分:0)
有同样的问题。就我而言,只需设置
setKeyListener(null);
setFocusable(false);
对ScrollView中的每个EditText进行修复。
将textIsSelectable
设置为false也是解决方案。