2016-12-05 15 views
0

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

Вот код:

int maxWidth=1040; // device width 
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       LayoutInflater vi = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
       View v = vi.inflate(R.layout.row_favorite, null); 
       final TextView textView = (TextView) v.findViewById(R.id.tv_name); 
int itemWidth = (int) (textView.getPaint().measureText(favoriteList.get(position).getName())); 


       if ((maxWidth/2)/3 > itemWidth) { 
        return 1; 
       } else if ((maxWidth/2)/3 < itemWidth && maxWidth/3 > itemWidth) { 
        return 2; 
       } else if (maxWidth/2 > itemWidth && maxWidth/3 < itemWidth) { 
        return 3; 
      } 
     }); 

Please check image

Проверить изображение

+0

Проверьте это [библиотека] (https://github.com/DavidPizarro/AutoLabelUI) –

+0

Я хочу показать большой объем записи, поэтому я предпочитаю использовать recyclerView, я применил несколько l library, но они смотрят Freez и т. д. Я рядом с вышеописанным методом, но когда-то расчет идет не так. Я думаю, что ** setSpanSizeLookup ** является правильным способом .. с нетерпением жду .. Спасибо за предложение библиотеки @BurakCakir –

+0

Если представление не замерзает в методе, который вы применяете, и только проблема заключается в вычислении, вы можете применить вышеперечисленное вычисление библиотеки на ваш собственный код. –

ответ

1

У нас есть возможность FlexboxLayout прямо сейчас.

Для макета,

<com .google.android.flexbox.flexboxlayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:flexwrap="wrap"> 

Мы также макет менеджер для динамической ручки по recyclerView

FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(); 

Наслаждайтесь .. !!

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17261781) – Antti29

+0

@ Antti29 Спасибо, что посоветовали мне. все на новом этапе. Отредактированный ответ. –

0

Добавить Flexbox зависимость

компиляции 'com.google.android:flexbox:0.3.1'

И множество FlexboxLayoutManager

FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(context); 
    layoutManager.setFlexDirection(FlexDirection.ROW); 
    layoutManager.setJustifyContent(JustifyContent.CENTER); 
    recyclerview.setLayoutManager(layoutManager);