android — просмотр списка в центре относительной компоновки

#android

#Android

Вопрос:

У меня есть следующий макет ( Android 4.4 ):

 <RelativeLayout       
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"  
     android:layout_width="match_parent"
     android:layout_height="match_parent">

       <ListView
        android:id="@ id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="@android:color/transparent"
        android:dividerHeight="5dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        />

</RelativeLayout>
 

Просмотр списка не отображается в центре. Чего мне не хватает?

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

Макет элемента ListView :

 <LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <ImageView
      android:id="@ id/icon"
      android:layout_width="100dp"
      android:layout_height="100dp"
      android:scaleType="fitXY"/>


  <TextView
      android:id="@ id/name"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@ id/label"
      android:layout_marginTop="40dp"
      android:textStyle="bold"
      android:background="@color/list_background"
    />
</LinearLayout>
 

Редактировать :

  1. Даже если я установлю для ширины представления списка значение wrap_content, это не будет иметь значения.
  2. Изменение внешнего вида на LinearLayout не помогает.

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

1. он уже соответствует родительской ширине, поэтому нет способа центрировать его по горизонтали

2. используйте LinearLayout вместо относительного макета

3. @Rod_Algonquin внес второе редактирование

4. @Jake опубликуйте свой макет элемента listview

5. @Rod_Algonquin опубликовал

Ответ №1:

Вам нужно изменить свой List Item Layout , чтобы центрировать представления по горизонтали.

пример:

 <?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:gravity="center_horizontal"
    android:orientation="horizontal" >

    <ImageView
        android:id="@ id/labIcon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/lawl"
        android:scaleType="fitXY" />

    <TextView
        android:id="@ id/labName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="item1"
        android:textStyle="bold" />

</LinearLayout>
 

Ответ №2:

Это не решит вашу проблему, но

  <ListView
        android:id="@ id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
 

Вы не должны использовать wrap_content для высоты ListView.

Таким образом, вы ListView должны измерить свои элементы и получить элементы, которые он должен вызвать getView() на адаптере. Это приводит к тому, что getView() метод вызывается несколько раз неэффективным способом.