scrollTo не работает, когда он находится позади вида с альфа - PullRequest
1 голос
/ 10 мая 2019

Я не могу заставить scrollTo работать, когда EditText отстает от LinearLayout с альфа-фоном.

Я хотел избежать uiautomator, потому что я думаю, что это иногда не работает

<RelativeLayout ...>
<ScrollView>
 <LinearLayout>
   <EditText />
   <EditText />
   <EditText />
   <EditText />
   ....
   <EditText android:id="@+id/name" />
 </LinearLayout>
</ScrollView>

<LinearLayout
            android:id="@+id/button_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:layout_alignParentBottom="true"
            android:background="@color/white80">

</RelativeLayout>
onView(withId(R.id.name)).perform(scrollTo(), typeText(name), closeSoftKeyboard());

Он говорит, что не может найти имя идентификатора.Он отлично работает, если экран большой, но если он маленький, а имя файла редактирования текста находится позади группы кнопок, у которой есть альфа-фон, то это всегда будет неудачей.

1 Ответ

1 голос
/ 10 мая 2019

Возможно, вы могли бы изменить видимость button_group с помощью пользовательского ViewAction перед выполнением прокрутки.

Во-первых, вам нужно пользовательское действие ViewAction, которое выполняет изменение видимости:

private static ViewAction setViewVisibitity(final boolean value) {
    return new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return null;
        }

        @Override
        public String getDescription() {
            return "Show / Hide View";
        }

        @Override
        public void perform(UiController uiController, View view) {
            view.setVisibility(value ? View.VISIBLE : View.GONE);
        }
    };
}

А затем:

onView(withId(R.id.button_group)).perform(setViewVisibitity(false));

onView(withId(R.id.name)).perform(scrollTo(), typeText(name), closeSoftKeyboard());

И позже вы можете восстановить видимость button_group, когда захотите:

onView(withId(R.id.button_group)).perform(setViewVisibitity(true));

Попробуйте.Поскольку button_group будет иметь видимость, установленную на GONE, он не должен мешать прокрутке.

...