Как найти ширину представления перед представлением?

Как найти ширину представления перед представлением? Я не хочу добавлять пользовательский вид и коснуться измерений в OnChanged ().

Solutions Collecting From Web of "Как найти ширину представления перед представлением?"

Display display = getWindowManager().getDefaultDisplay(); View view = findViewById(R.id.YOUR_VIEW_ID); view.measure(display.getWidth(), display.getHeight()); view.getMeasuredWidth(); // view width view.getMeasuredHeight(); //view height 

@dmytrodanylyk – я думаю, что он вернет ширину и высоту как 0, поэтому вам нужно использовать следующую вещь

 LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View contentview = inflater.inflate(R.layout.YOURLAYOUTNAME, null, false); contentview.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); int width = contentview.getMeasuredWidth(); int height = contentview.getMeasuredHeight(); 

Это даст вам правильную высоту и ширину.

Вы должны использовать OnGlobalLayoutListener который вызывается для изменений в представлении, но до его рисования.

 costumView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { costumView.getWidth(); } }); 
 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); view.measure(size.x, size.y); int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight(); 

Мне нравится использовать эту технику в соответствии с моим ответом по соответствующему вопросу :

Отправьте runnable из onCreate() который будет выполнен при создании представления:

  contentView = findViewById(android.R.id.content); contentView.post(new Runnable() { public void run() { contentHeight = contentView.getHeight(); } }); 

Этот код будет работать в основном потоке пользовательского интерфейса после onCreate() .

Это лучший способ … РАБОТА !!!

 public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (fondo_iconos_height==0) { // to ensure that this does not happen more than once fondo_iconos.getLocationOnScreen(loc); fondo_iconos_height = fondo_iconos.getHeight(); redraw_function(); } } 
 yourView.measure(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); int yourView= m_hidableRowContainer.getMeasuredHeight(); 

Вот и все.