У меня есть 2 View ImageVIew и TextView. getView getHeight возвращяет 0.
Как мне узнать размер ImageVIew и TextView в Адаптере RecyclerView. Может есть слушатель какой - нибудь для BindView?
Или можете мне сказать как рассчитать размеры элементов в XML. через LayoutInflater. А уже после я бы запустил адаптер....
Это мой ужасный код
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
// RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) holder.icon.getLayoutParams();
// if ((position & 1) == 0) layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
// else layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.icon.post(new Runnable()
{
@Override
public void run()
{
final int imgW = holder.icon.getWidth();
final int imgH = holder.icon.getHeight();
holder.messageView.post(new Runnable() {
@Override
public void run() {
int txtH=holder.messageView.getLineHeight();
SpannableString ss = new SpannableString(Html.fromHtml(str[0]));
int lines=imgH/txtH;
ss.setSpan(new TextViewMarginSpan(imgW,lines), 0, ss.length(), 0);
holder.messageView.setText(ss);
}
});
}
});
}
Хочу сделать вот так
Узнать размер View можно только после того, как все элементы Layout сформированы. Для этого существует OnGlobalLayoutListener
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// view сформирован, можно получать размеры
});
Если размер View
указан в dp/sp/px то можете перевести их в пиксели. Если View
во всю ширину экрана то берете ширину экрана минус маргины (если есть).
Если ширина указана с весом, к примеру 0.3, то делите ширину экрана на 100 и умножайте на 30.
В этих случаях лучше считать размеры в конструкторе адартере единожды
Если в вашем случае так сделать нельзя, то вот, на худой конец юзайте
view.post(new Runnable()
{
@Override
public void run()
{
int w = view.getWidth();
int h = view.getHeight();
}
});
Гораздо удобней использовать post
view.post(new Runnable() {
@Override
public void run() {
view.getWidth();
}
});
Только в своем примере замените на свой view
. Размер расчитается ровно после того, как вьюшка будет сформирована на разметке
Попробуйте получать размеры через LayoutParams
так:
int width = view.getLayoutParams().width;
Ещё можно вот так попробовать рассчитать размеры. Этот способ позволит получить размеры до отрисовки, синхронно:
textView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
int height = textView.getMeasuredHeight();
int width= textView.getMeasuredWidth();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На экране элементы ImageView и SeekBarодновременно нужно двигать оба элемента: менять значение seekbar и перемещать imageView
Есть приложение, которое взаимодействует с базой данных, база данных - является docker образом, накатывание базы данных происходит через liquibase...
Здравствуйте! Я начинаю изучать J2EE и у меня вопрос, как мне изменить страницу поздравления с indexhtml на допустим new
В ASP есть команда, которая вставляет один файл html в другой