Просмотры в галерее теряют «фокус» при недействительности или навигации

#android #android-layout #xamarin.android

#Android #android-макет #xamarin.android

Вопрос:

Я создал представление галереи с 2 представлениями с 3 простыми текстовыми представлениями, чтобы представить некоторые данные из моей модели данных. При вызове метода Invalidate в 2 представлениях это похоже на то, что представления теряют фокус, в том же случае, когда я перемещаюсь в представлении галереи.

Текст становится почти нечитаемым после потери «фокуса». (См. Два рисунка ниже)

Я использую Monodroid, но также приветствуются обычные примеры Android.

Код для моего просмотра галереи:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <Gallery
    android:id="@ id/locationGallery"
    android:layout_height="match_parent"
    android:layout_width="fill_parent">

  </Gallery>
</LinearLayout>
  

Код для двух представлений, которые я поместил в представление галереи:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="top"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="3sp"
    android:id="@ id/locationGalleryItem"
    >

  <TextView
    android:id="@ id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
        android:padding="10dp"
    android:textSize="16sp"
    />
  <TextView
  android:id="@ id/text2"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_below="@id/text1"
      android:padding="10dp"
    android:textSize="16sp"
    />
  <TextView
  android:id="@ id/text3"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_below="@id/text2"
      android:padding="10dp"
    android:textSize="16sp"
    />

</LinearLayout>
  

введите описание изображения здесьвведите описание изображения здесь

Ответ №1:

Я исправил проблему, создав обработчик событий для свойства ItemSelected в представлении галереи. Этот обработчик событий отслеживает текущую позицию представления галереи. Затем вызывает метод setSelection в представлении галереи в текущую позицию. Это дает желаемый результат.

Код:

 locationGallery.ItemSelected  = new EventHandler<ItemEventArgs>(locationGallery_ItemSelected);

void locationGallery_ItemSelected(object sender, ItemEventArgs e)
{
    var send = sender as Gallery;
    send.SetSelection(e.Position);
}
  

Комментарии:

1. Использование этого немного глючит, а при прокрутке оно немного прерывистое и иногда привязывается к одному из дочерних представлений. Собираюсь искать другое решение. Я изучал представление галереи, и кажется, что у него нет функции фокусировки по умолчанию, поэтому, возможно, именно поэтому unselectedAlpha полностью игнорируется.

2. Итак, я фактически создал порт горизонтального пейджера, который можно найти здесь: github.com/Cheesebaron/MonoDroid . HorizontalPager

Ответ №2:

Я полагаю, что самым простым способом решить эту проблему было бы добавить следующее в вашу галерею (если вам это, конечно, не нужно):

 android:unselectedAlpha="1.0"
  

Комментарии:

1. Это, похоже, не имело никакого значения.

2. В галерее по умолчанию дочерние элементы будут слегка прозрачными, когда они не выбраны. Приведенный выше код удалит эту прозрачность.

3. По какой-то причине прозрачность остается для всех дочерних элементов. Хотя я думаю, что нашел решение. Я попробую немного повозиться с этим перед публикацией, чтобы проверить, действительно ли это работает.