2014-01-31 6 views
0

Мне нужно получить ширину пользовательского представления, которое я создаю, расширяя LinearLayout. Мой первоначальный удар был сделанПолучение ширины пользовательского вида

int width = this.getLayoutParams().width 

Однако это только вернет -1.

Далее я попытался перекрывая onMeasure(int, int)

@Override 
protected void onMeasure(int width, int height) { 
    super.onMeasure(width, height); 
    this.width = MeasureSpec.getSize(width); 
} 

Это работало, чтобы получить ширину, но она выполняется после того, как я на самом деле нужна ширина (я думаю, вид еще не был построен?)

Мне это особенно нужно для Карт Google с помощью этого метода: `map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, width, height, MAP_PADDING));

Любые предложения по получению ширины?

ответ

0

Если вы не указали ширину/высоту своего представления на статичное значение (например, x-dp или match_parent), вы не можете знать размер своего вида, пока цикл onMeasure не будет завершен. Также андроид может многократно вызывать onMeasure, чтобы найти подходящий размер, поэтому это не лучшее место для поиска точного размера. Возможно, вам придется найти способ задержать функцию map.moveCamera для onLayout.

0

Вы можете сделать это следующим образом:

// Name the activity's root view - your custom linear layout 
View view = findViewById(R.id.customLinearLayout) 
int width = view.getRootView().getWidth(); // this returns the actual width of the view 

Это всегда работал для меня

+0

Я объявляю 'View view' в активности/фрагмента, где я называю настраиваемое представление, правильно? – ono

+0

Я сделал 'this.getRootView(). GetWidth()' в пользовательском представлении, но он дал 0 – ono

Смежные вопросы