Intereting Posts
Преобразование видео для Android с использованием FFMPEG Как использовать намерение выбора файлового браузера для выбора файла Создайте ошибку, ссылаясь на файл build.xml и proguard: «null null: 1» Кордова 4.3.0 Ошибка: установите Android-цель: «android-21» Android Studio не может импортировать модули после обновления Как показать статус индикатора выполнения в процентах Установка Android-приложения для Android версии 5.0 показывает недействительный код ошибки при установке приложения: «-505» Оптимальная практика подключения TCP к TCP Почему Android 4.0 / Ice Cream Sandwich выделяет столько кучи памяти? Шаблоны для разработки Android-игр? Какой конструктор это, начиная с <T extends Drawable & DrawerToggle>? Отключить режим обнаружения Bluetooth на Android Проверьте, установлены ли дополнительные функции или нет. Как добавить кнопку в конце RecyclerView? Android. Где мы должны сохранять имя пользователя и пароль в памяти устройства?

Android – Как показать вертикальную линию на фоне ListView (и в соответствии с высотой строки)?

Как показать вертикальную линию на фоне, например, выделенную синим цветом на изображении ниже?

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

В этом примере у меня есть элементы ListView с ImageView (и TextView, но они не связаны с линией), и я хочу, чтобы вертикальная линия на фоне этих элементов чувствовала, что они «подключены» к каждому из них.

А также обратите внимание, что вертикальная линия не заполняет весь фон.

Вертикальная линия находится слева, и она не равна для всех случаев. Иногда он заполняет всю высоту строки (в большинстве строк ListView), а иногда просто заполняет половину высоты строки (в последнем элементе ListView и за пределами ListView вверху, где мы видим большой ImageView с Значок звезды).

обновленный

Я попробовал предложение, предложенное Hellboy, и он почти отлично работает. Я изменил предлагаемый код для моего случая:

<RelativeLayout android:layout_width="40dp" android:layout_height="match_parent" android:gravity="center" android:layout_marginLeft="15dp"> <View android:layout_width="4dp" android:layout_height="match_parent" android:background="#3399CC" android:gravity="center" android:layout_centerHorizontal="true"/> <ImageView android:id="@+id/user_image" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:gravity="center" android:background="@android:color/holo_blue_light" > </ImageView> </RelativeLayout> 

RelativeLayout с шириной = "40dp" (то же, что и с исходным ImageView, с которым я работал), height = "match_parent (так же, как он сказал), gravity =" center "(чтобы позволить им в центре высоты строки ) И layout_marginLeft = "15dp" (чтобы оставить пробел в левом поле). В ImageView я добавил marginTop = "10dp" и marginBottom = "10dp", а вместе с ним появляется синяя вертикальная линия. Элементы в той же строке, поэтому у меня есть родительский макет (линейный макет). Мой родительский макет:

 <?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="match_parent" android:orientation="horizontal" android:gravity="center" android:id="@+id/linearlayoutservicerow"> 

Итак, этот родительский макет выше, имеет описанные RelativeLayout и другие LinearLayout с другими элементами строки. Но код приводит к уплощенным изображениям . Почему это происходит ?! Похоже, что RelativeLayout рассматривает его высоту как высоту ImageView (40dp) и рассматривает ее marginTop и marginBottom, и с этим изображение сглаживается.

Жду больше ответов на эту проблему. Я попробую другие варианты.

Solutions Collecting From Web of "Android – Как показать вертикальную линию на фоне ListView (и в соответствии с высотой строки)?"

Вы можете заменить ImageView на что-то вроде этого:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="4dp" android:layout_height="match_parent" android:background="@color/navy_blue" android:layout_centerHorizontal="true"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/image"/> </RelativeLayout> 

И, конечно же, в вашем первом и последнем элементах вам нужно управлять высотой представления и выровнять его по верхней или нижней части

Вы можете использовать прозрачное изображение с 9 патчами в качестве фона для просмотра списка.

Для создания изображения с девятью патчами выполните следующие действия: http://developer.android.com/tools/help/draw9patch.html

Я ПОНЯЛ!!!

Привет, ребята, я упорствовал в попытке решить проблему раздела « Обновленный » моего вопроса (на основе решения, первоначально предложенного @Hellboy), и я получил результаты! Итак, как я получил ответ на свой вопрос, я решил ответить в качестве ответа.

Первым шагом было настроить XML-файл, например, код ниже.

Часть окончательного 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="match_parent" android:orientation="horizontal" android:gravity="center" android:id="@+id/linearlayoutservicerow"> <RelativeLayout android:layout_width="40dp" android:layout_height="match_parent" android:gravity="center" android:layout_marginLeft="15dp"> <View android:layout_width="4dp" android:id="@+id/verticallineview" android:layout_height="match_parent" android:background="#3399CC" android:gravity="center" android:layout_centerHorizontal="true"/> <RelativeLayout android:layout_width="40dp" android:layout_height="match_parent" android:gravity="center" android:paddingBottom="10dp" android:paddingTop="10dp"> <ImageView android:id="@+id/user_image" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@android:color/holo_blue_light" > </ImageView> </RelativeLayout> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/layoutotherrowelements"> </LinearLayout> </LinearLayout> 

Объяснение XML:

Здесь у нас есть родительский макет (linearlayoutservicerow) и внутри него: RelativeLayout (предложенный @HellBoym, со структурированным обсуждением в финале моего вопроса) и LinearLayout для других элементов строки (layoutotherrowelements). Подводя итоги … Что я изменил?

Первоначальный код привел к сглаживанию изображений, поскольку RelativeLayout (родительский) не учитывал marginView и ImageBottom ImageView, поэтому изображение было сплющено вертикально. (И если мы допустим без поля, RelativeLayout будет иметь тот же размер, и вертикальная линия не будет отображаться сверху и снизу изображения.) У нас должно быть пространство между ImageView и RelativeLayout, изначально предложенным для того, чтобы Показать строку, но если она не распознает маржу, как создать это пространство?

Я просто «инкапсулировал» ImageView в другой RelativeLayout (внутри этого родительского RelativeLayout) и изменил параметры поля ImageView на параметры заполнения этой капсулы RelativeLayout.

Проблема последней строки

Это приводит к компоновке с фоном линии, но у нас все еще есть проблема с последней строкой. На самом деле эта строка отличается, и в этом случае она должна иметь свою высоту, чтобы не иметь высоту одного и того же родителя. Я решил, по крайней мере, увеличить высоту ImageView, и это сработало! Не забудьте преобразовать значение в dp в пиксель, потому что функция getLayoutParams имеет все параметры, выраженные в пикселях.

Итак, в адаптере мы добавим следующий код:

 if(position==(getCount()-1)){ View my_line = (View) row.findViewById(R.id.verticallineview); //40dp, this is the ImageView height int dpsize = 40; //convert the height in dp unit to pixel (because the parameter is in px) int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpsize, context.getResources().getDisplayMetrics()); my_line.getLayoutParams().height = px; } 

И это все !!!

Стоит отметить, что @dinesh sharma предложила другую интересную альтернативу с использованием 9-патча, которую я попробую позже.

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

Спасибо за вашу помощь, ребята! Вы мне очень помогли!!! В моем текущем решении я использовал подсказку @ Hellboy об использовании RelativeLayout и View, а также подсказку @dinesh sharma, чтобы проверить, является ли она последней строкой ListView. Надеюсь, этот ответ и другие помогут большему числу людей с подобными проблемами.

Теперь подтвержденный ответ

Ваше изображение в макете объекта:

 <RelativeLayout android:id="@+id/rl" android:layout_width="60dp" android:layout_height="60dp" android:background="@drawable/m" android:paddingBottom="10dp" android:paddingTop="10dp" > <ImageView android:id="@+id/grid_item_image" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerInParent="true" android:src="@drawable/ic_launcher" /> </RelativeLayout> 

Три bg девять патч-изображений для рисования Верхняя пустаяЗаполнять содержимоеНижний пуст

Обработка в адаптере:

  if(position==0) holder.rl.setBackgroundResource(R.drawable.b); if(position==(getCount()-1)) holder.rl.setBackgroundResource(R.drawable.t); 

Окончательный результат:

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