I tried to use ViewTreeObserver in getView . But I get 0 because view is not yet formed, but only filled. I need to know the size before displaying the view to make changes. Or at least when the view already displayed on the screen, you can quickly make changes without user intervention (without pressing a button).
@Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (mData.get(position).mTemplateId == DYNAMIC_CARD){ if (convertView == null) { convertView = getActivity().getLayoutInflater().inflate(R.layout.card_tipe_3, parent, false); viewHolder = new ViewHolder(); viewHolder.imageViewLogo = (ImageView) convertView.findViewById(R.id.imageViewLogoUrl_1); viewHolder.textCompanyName = (TextView) convertView.findViewById(R.id.textViewCompanyName_1); viewHolder.textFullName = (TextView) convertView.findViewById(R.id.textViewFullName_1); viewHolder.textViewJobTitle = (TextView) convertView.findViewById(R.id.textViewJobTitle_1); viewHolder.textViewDepartment = (TextView) convertView.findViewById(R.id.textViewDepartment_1); viewHolder.textViewSite = (TextView) convertView.findViewById(R.id.textViewURLSite_1); viewHolder.textViewEmail = (TextView) convertView.findViewById(R.id.textViewEmail_1); viewHolder.textViewAddress = (TextView) convertView.findViewById(R.id.textViewAdress_1); viewHolder.layout = (LinearLayout) convertView.findViewById(R.id.telephone_1); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } final ArrayList<String> phones_mPrimary = new ArrayList<>(); phones_mPrimary.addAll(mData.get(position).mContact.mPrimary.getPhoneOffice()); phones_mPrimary.addAll(mData.get(position).mContact.mPrimary.getPhoneDesk()); phones_mPrimary.addAll(mData.get(position).mContact.mPrimary.getPhoneMobile()); phones_mPrimary.addAll(mData.get(position).mContact.mPrimary.getPhoneFax()); viewHolder.imageViewLogo.setImageURI(Uri.parse(mData.get(position).mContact.mPrimary.getImageUrl())); viewHolder.textCompanyName.setText(mData.get(position).mContact.mPrimary.getOrganization()); viewHolder.textFullName.setText(mData.get(position).mContact.mPrimary.getFullName()); viewHolder.textViewJobTitle.setText(mData.get(position).mContact.mPrimary.getJobTitle()); viewHolder.textViewDepartment.setText(mData.get(position).mContact.mPrimary.getDepartment()); viewHolder.textViewSite.setText(mData.get(position).mContact.mPrimary.getURL().get(0)); viewHolder.textViewEmail.setText(mData.get(position).mContact.mPrimary.getEmail().get(0)); viewHolder.textViewAddress.setText(mData.get(position).mContact.mPrimary.getAddress().get(0)); //вариант 1 viewHolder.layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @SuppressLint("NewApi") @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { //now we can retrieve the width and height viewHolder.layout.getHeight(); Log.d("MyLog", "getViewTreeObserver(). Size: " + viewHolder.layout.getHeight()); for (int i = 0; i < phones_mPrimary.size(); i++) { TextView textView = new TextView(getActivity()); textView.setText(phones_mPrimary.get(i)); textView.setTextSize(14); viewHolder.layout.addView(textView); } } }); //вариант 2 viewHolder.layout.post(new Runnable() { @Override public void run() { viewHolder.layout.getHeight(); Log.d("MyLog", "new Runnable(). Size: " + viewHolder.layout.getHeight()); for (int i = 0; i < phones_mPrimary.size(); i++) { TextView textView = new TextView(getActivity()); textView.setText(phones_mPrimary.get(i)); textView.setTextSize(14); viewHolder.layout.addView(textView); } } }); } Log.d("MyLog", "return convertView"); return convertView; } D/MyLog: return convertView D/MyLog: getViewTreeObserver(). Size: 526 D/MyLog: getViewTreeObserver(). Size: 526 D/MyLog: new Runnable(). Size: 526