Вычислите размер представления списка или как сказать ему полностью расширяться

Я в настоящее время пытаюсь использовать ListView в ScrollView. Я знаю, из какого я считал, что на это смотрят вниз, но я пытаюсь заставить ListView расширяться полностью путем показа всех его строк, таким образом, нет никакой потребности в нем для прокрутки. Я боролся, однако, с тем, как сказать ListView полностью расширяться для показа всех его строк, так как ему нужна определенная высота. Кто-либо знает о способе вычислить высоту полностью расширенного ListView, прежде чем она будет оттянута?

Эта проблема главным образом происходит от того, что Вы не можете вставить представление с возможностью прокрутки другого представления с возможностью прокрутки. Я хорошо с тем, что ListView не сможет прокрутить, пока я могу заставить его расшириться для показа всех его строк. Я не могу сделать этого, однако, не имея возможности дать ему определенную высоту, которая кажется, что я должен был бы вычислить.

Посмотрите URL ниже для эскиза (я - новый пользователь, таким образом, мне не разрешают отправить один). Это показывает, что мое полное расположение является слишком большим для "физического" экрана и потребностей прокрутить для показа остальной части списка и кнопок внизу. Я пытаюсь объяснить это, "виртуальный" экран является слишком большим для установки на одном экране даже без ListView там.

http://img51.imageshack.us/img51/7210/screenmockup.png

36
задан Rudy Mutter 22 February 2010 в 20:09
поделиться

3 ответа

Если вы хотите ListView, который не прокрутит вас, не мог только использовать LinearLayout?

3
ответ дан 27 November 2019 в 05:27
поделиться

Вы не должны помещать свой ListView в ScrollView. ListView уже доступен для прокрутки.

ListView должен полностью разворачиваться по умолчанию, если это единственное, что есть в макете.

Если это не единственное, что есть в макете, и вы хотите, чтобы ListView расширялся, чтобы занять все доступное пространство, установите layout_weight в ListView равным 1, где все остальные layout_weight = 0.

<LinearLayout android:layout_width="fill_parent" 
             android:layout_height="fill_parent" orientation="vertical">
  <TextView id="@+id/title" 
             android:layout_width="wrap_content" 
            android:layout_height="wrap_content"/>
  <ListView id="@+id/listView" 
            android:layout_width="fill_parent" 
            android:layout_height="0dp" 
            android:layout_weight="1"/>
</LinearLayout>

Изменить: ListView действительно предназначен для прокрутки ... макет экрана, который вы видите на скриншоте, на самом деле не похож на "способ Android".

Однако, если вы действительно хотите обойти это, вы можете попробовать увеличить одну из строк, получить ее minHeight и умножить ее на количество элементов в адаптере ListView.

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.label_value_row, null, false);
int height = adapter.getCount() * view.getMinHeight();
2
ответ дан 27 November 2019 в 05:27
поделиться

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

0
ответ дан 27 November 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: