#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. По какой-то причине прозрачность остается для всех дочерних элементов. Хотя я думаю, что нашел решение. Я попробую немного повозиться с этим перед публикацией, чтобы проверить, действительно ли это работает.