Вы пытаетесь получить ширину и высоту элементов, которые еще не были нарисованы.
Если вы используете отладку и остановитесь в какой-то момент, вы увидите, что экран вашего устройства все еще пустэто потому, что ваши элементы еще не прорисованы, поэтому вы не можете получить ширину и высоту чего-то, что еще не существует.
И я могу ошибаться, но setWidth()
не всегдауважаемый, Layout
выкладывает свои дочерние элементы и решает, как их измерить (вызывая child.measure()
), поэтому если вы установите setWidth()
, вы не гарантированно получите эту ширину после отрисовки элемента.Что вам нужно, это использовать getMeasuredWidth()
(самый последний показатель вашего вида) где-то после того, как вид был нарисован.
Изучите жизненный цикл Activity
, чтобы найти лучший момент.
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
Я считаю, что хорошей практикой является использование OnGlobalLayoutListener
следующим образом:
yourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (!mMeasured) {
// Here your view is already layed out and measured for the first time
mMeasured = true; // Some optional flag to mark, that we already got the sizes
}
}
});
Вы можете поместить этот код непосредственно в onCreate()
, и он будет вызван, когдавиды будут выложены.