Как рассчитать высоту элемента списка просмотра во время выполнения и установить все элементы с одинаковой высотой в Android? - PullRequest
1 голос
/ 21 марта 2012

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

Как рассчитать высоту элемента списка с максимальными данными и установить эту высоту для остальных элементов списка в списке.

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

<?xml version="1.0" encoding="utf-8"?>

<WebView
    android:id="@+id/wv1" 
    android:layout_width="fill_parent" android:paddingRight="20dp"
    android:layout_height="wrap_content" />

1 Ответ

0 голосов
/ 22 марта 2012

Есть массив флагов, скажем,

boolean[] flags=new boolean[szieOfList];

заполнить этот массив до false;

Имейте переменную max height в вашей активности или адаптере, скажем, max, инициализируйте его с 0 в методе onCreate, теперь в методе getView, где вы накачиваете xml, напишите следующий код:

LayoutInflater layoutInflater = (LayoutInflater) getActivity()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view= (WebView) layoutInflater
            .inflate(R.layout.web_view, null);
if(flag[position])
{
      LayoutParams params = view.getLayoutParams();
              params.height = max;
              view.setLayoutParams(params);
}     
ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        //in here, place the code that requires you to know the dimensions.

         flag[position]=true;
         int height= view.getHeight();
         if(max<height)
         {
              max=height;
              notifyDataSetInvalidated();
         }
          else
         {
               LayoutParams params = view.getLayoutParams();
              params.height = max;
              view.setLayoutParams(params);
         }
         //this will be called as the layout is finished, prior to displaying.
    }
}
...