Как найти ширину представления перед представлением? Я не хочу добавлять пользовательский вид и коснуться измерений в OnChanged().
Как найти ширину представления перед представлением?
Ответ 1
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
Ответ 2
@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();
Он даст вам правильную высоту и ширину.
Ответ 3
Вы должны использовать OnGlobalLayoutListener
, который вызывается для изменений в представлении, но до его рисования.
costumView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
costumView.getWidth();
}
});
Ответ 4
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();
Ответ 5
Мне нравится использовать эту технику в соответствии с моим ответом по соответствующему вопросу:
Опубликовать runnable из onCreate()
, который будет выполнен при создании представления:
contentView = findViewById(android.R.id.content);
contentView.post(new Runnable()
{
public void run()
{
contentHeight = contentView.getHeight();
}
});
Этот код будет работать в основном потоке пользовательского интерфейса, после завершения onCreate()
.
Ответ 6
Это лучший способ... РАБОТА!!!
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();
}
}
Ответ 7
yourView.measure(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
int yourView= m_hidableRowContainer.getMeasuredHeight();
Что это.