ScrollView滚动到顶部按钮单击android

时间:2018-02-14 22:36:45

标签: android scrollview

我有这个奇怪的“虫子”。在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上(未在早期版本上测试)

任何人都知道原因吗?

由于

2 个答案:

答案 0 :(得分:0)

好的,找到了解决方案。

正如我在上面的评论中所述,问题是由TextViews将属性“textIsSelectable”设置为True引起的。目前尚不清楚原因(调用requestChildFocus的东西),但我找到了解决方法。在我的按钮代码中,我将textIsSelectable属性设置为false,然后更改按钮的backgroundColor,然后将textIsSelectable重置为true。

任何人都有更好的选择吗?

答案 1 :(得分:0)

有同样的问题。就我而言,只需设置

setKeyListener(null);
setFocusable(false);

对ScrollView中的每个EditText进行修复。

textIsSelectable设置为false也是解决方案。