public void enable() { if (Build.VERSION.SDK_INT >= 19) { decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener); } }
TextView snippet; snippet.setText("loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor loren ipsum dolor ") ViewTreeObserver vto = this.snippet.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ViewTreeObserver obs = snippet.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); if (snippet.getLineCount() > 3) { int lineEndIndex = snippet.getLayout().getLineEnd(2); String text = snippet.getText().subSequence(0, lineEndIndex - 3) + "..."; snippet.setText(text); } } });
@Override public void onGlobalLayout() { itemView.getViewTreeObserver().removeOnGlobalLayoutListener(this); viewWidth = itemView.getWidth(); viewHeight = itemView.getHeight(); loadBitmap(resId); } });
@SuppressWarnings("deprecation") static void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) { if (Build.VERSION.SDK_INT >= 16) { observer.removeOnGlobalLayoutListener(listener); } else { observer.removeGlobalOnLayoutListener(listener); } }
void clearCallbacksAndListener() { // Keep a reference to the layout attachStateListener and remove it here // rather than having the observer remove itself because the observer // we add the attachStateListener to will be almost immediately merged into // another observer and will therefore never be alive. If we instead // keep a reference to the attachStateListener and remove it here, we get the // current view tree observer and should succeed. ViewTreeObserver observer = view.getViewTreeObserver(); if (observer.isAlive()) { observer.removeOnPreDrawListener(layoutListener); } layoutListener = null; cbs.clear(); }
final TextView tv = (TextView)findViewById(R.id.image_test); ViewTreeObserver vto = tv.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { LayerDrawable ld = (LayerDrawable)tv.getBackground(); ld.setLayerInset(1, 0, tv.getHeight() / 2, 0, 0); ViewTreeObserver obs = tv.getViewTreeObserver(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { obs.removeOnGlobalLayoutListener(this); } else { obs.removeGlobalOnLayoutListener(this); } } });
from = String.format("%s", Html.fromHtml(statusContent.getSource())); String desc = String.format("%s %s", createAt, from); txtDesc.setText(desc); layRe.setVisibility(View.GONE); layRe.setVisibility(View.VISIBLE); layRe.setTag(reContent); layPicturs.setVisibility(View.GONE); layPicturs.release(); txtPics.setVisibility(View.GONE); imgVideo.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { layPicturs.setVisibility(View.GONE); if (s.getPic_urls() != null && s.getPic_urls().length > 0) { txtPics.setText(String.format("%dPics", s.getPic_urls().length)); txtPics.setVisibility(View.VISIBLE); txtPics.setTag(s);
textViewValue = (TextView) findViewById(R.id.round_corner_progress_text); textSize = (int) typedArray.getDimension(R.styleable.RoundCornerProgress_textProgressSize, textSize); textViewValue.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); textViewValue.setTextColor(typedArray.getColor(R.styleable.RoundCornerProgress_textProgressColor, textColor)); text = typedArray.getString(R.styleable.RoundCornerProgress_textProgress); text = (text == null) ? "" : text; textViewValue.setText(text); textPadding = (int) typedArray.getDimension(R.styleable.RoundCornerProgress_textProgressPadding, textPadding); textViewValue.setPadding(textPadding, 0, textPadding, 0); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() {
@Override public boolean onPreDraw() { // 避免重复监听 contentText.getViewTreeObserver().removeOnPreDrawListener(this); int linCount = contentText.getLineCount(); if(linCount > showLines){ if(isExpand){ contentText.setMaxLines(Integer.MAX_VALUE); textPlus.setText("收起"); }else{ contentText.setMaxLines(showLines); textPlus.setText("全文"); } textPlus.setVisibility(View.VISIBLE); }else{ textPlus.setVisibility(View.GONE); } //Log.d("onPreDraw", "onPreDraw..."); //Log.d("onPreDraw", linCount + ""); return true; }
infoView = layoutInfo.findViewById(R.id.info_layout); textViewInfo = (TextView) layoutInfo.findViewById(R.id.textview_info); textViewInfo.setTextColor(colorTextViewInfo); imageViewIcon = (ImageView) layoutInfo.findViewById(R.id.imageview_icon); dotView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() {
public void setText(final CharSequence content){ contentText.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { // 避免重复监听 contentText.getViewTreeObserver().removeOnPreDrawListener(this); int linCount = contentText.getLineCount(); if(linCount > showLines){ if(isExpand){ contentText.setMaxLines(Integer.MAX_VALUE); textPlus.setText("收起"); }else{ contentText.setMaxLines(showLines); textPlus.setText("全文"); } textPlus.setVisibility(View.VISIBLE); }else{ textPlus.setVisibility(View.GONE); } //Log.d("onPreDraw", "onPreDraw..."); //Log.d("onPreDraw", linCount + ""); return true; } }); contentText.setText(content); contentText.setMovementMethod(new CircleMovementMethod(getResources().getColor(R.color.name_selector_color))); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_preview); ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); final TextView tv_pager = (TextView) findViewById(R.id.tv_pager); rootView = (RelativeLayout) findViewById(R.id.rootView); DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); screenWidth = metric.widthPixels; screenHeight = metric.heightPixels; Intent intent = getIntent(); imageInfo = (List<ImageInfo>) intent.getSerializableExtra(IMAGE_INFO); currentItem = intent.getIntExtra(CURRENT_ITEM, 0); imagePreviewAdapter = new ImagePreviewAdapter(this, imageInfo); viewPager.setAdapter(imagePreviewAdapter); viewPager.setCurrentItem(currentItem); viewPager.getViewTreeObserver().addOnPreDrawListener(this); viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { currentItem = position; tv_pager.setText(String.format(getString(R.string.select), currentItem + 1, imageInfo.size())); } }); tv_pager.setText(String.format(getString(R.string.select), currentItem + 1, imageInfo.size())); }
return; } else if (!isShowing) { viewMaskBg.setVisibility(VISIBLE); llContentListView.setVisibility(VISIBLE); llContentListView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { tvCategoryTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary)); ivCategoryArrow.setImageResource(R.mipmap.home_down_arrow_red); setCategoryAdapter(); break; case POSITION_SORT: tvSortTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary)); ivSortArrow.setImageResource(R.mipmap.home_down_arrow_red); setSortAdapter(); break; case POSITION_FILTER: tvFilterTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary)); ivFilterArrow.setImageResource(R.mipmap.home_down_arrow_red); setFilterAdapter(); break;
mPointBackground = inflateView.findViewById(R.id.stepper_point_background); mLineView = inflateView.findViewById(R.id.stepper_line); mPointNumber = inflateView.findViewById(R.id.stepper_number); mTitleText = inflateView.findViewById(R.id.stepper_title); mSummaryText = inflateView.findViewById(R.id.stepper_summary); mTitleText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() {
@Override public boolean onPreDraw() { if (actualDimensions == null) { actualDimensions = new int[] { view.getWidth(), view.getHeight() }; } view.getViewTreeObserver().removeOnPreDrawListener(this); return true; } });
final View testView = findViewById(R.id.view_id); ViewTreeObserver vto = testView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Log.d("TEST", "Height = " + testView.getHeight() + " Width = " + testView.getWidth()); ViewTreeObserver obs = testView.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); } });
@Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { blurView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } else { legacyRemoveOnGlobalLayoutListener(); } int measuredWidth = blurView.getMeasuredWidth(); int measuredHeight = blurView.getMeasuredHeight(); init(measuredWidth, measuredHeight); }
@Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { iv.getViewTreeObserver().removeOnGlobalLayoutListener(this); } else { iv.getViewTreeObserver().removeGlobalOnLayoutListener(this); } RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) iv.getLayoutParams(); params.height = params.width; iv.setLayoutParams(params); iv.setScaleType(ImageView.ScaleType.CENTER_CROP); } });
@NonNull @Override public ListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); final View view = inflater.inflate(R.layout.recycler_item, viewGroup, false); view.getLayoutParams().width = screenWidth; if (actualDimensions == null) { view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { if (actualDimensions == null) { actualDimensions = new int[] { view.getWidth(), view.getHeight() }; } view.getViewTreeObserver().removeOnPreDrawListener(this); return true; } }); } return new ListViewHolder(view); }
@Test public void testDoesNotThrowOnPreDrawIfViewTreeObserverIsDead() { target.getSize(cb); int width = 1; int height = 2; LayoutParams layoutParams = new FrameLayout.LayoutParams(width, height); view.setLayoutParams(layoutParams); ViewTreeObserver vto = view.getViewTreeObserver(); view.requestLayout(); activity.visible(); assertFalse(vto.isAlive()); vto.dispatchOnPreDraw(); verify(cb).onSizeReady(eq(width), eq(height)); }