getLayoutParams.width vs getWidth()

71
7

У меня есть следующее представление:

<View
android:id="@+id/divider"
android:layout_height="2dp"
android:background="#ffffff"
android:layout_below="@+id/timer"
android:layout_width="wrap_content" />

Я реализую таймер в своем проекте. Таким образом, функция onTick() вызывается каждую секунду:

public void onTick(long millisUntilFinished) {
secsPassed++;
minsPassed = (secsPassed-1)/60;
View dividerWhite = findViewById(R.id.dividerWhite);
View divider = findViewById(R.id.divider);
Log.i("divider.getWdith() = ", divider.getWidth()-secsPassed + "");
Log.i("layout width ", divider.getLayoutParams().width + " ");
//further code to implement a timer

Проблема в том, что я получаю -1 для divider.getLayoutParams().width то время как значение divider.getWidth() верное (т.е. оставшиеся секунды)

Мне нужно динамически изменять ширину представления в секундах. divider.setLayoutParams().width - хороший вариант для этого. Но это не меняет ширину макета, которая по-прежнему остается -1

спросил(а) 2015-12-07T08:09:00+03:00 4 года, 10 месяцев назад
1
Решение
81

getLayoutParams().width возвращает -1, когда ширина MATCH_PARENT. getLayoutParams().width может быть FILL_PARENT (заменена MATCH_PARENT, в уровне API 8) или WRAP_CONTENT или точный размер. Но getWidth() всегда возвращает ширину в пикселях.

ответил(а) 2015-12-07T09:16:00+03:00 4 года, 10 месяцев назад
41

Попробуйте использовать следующий код.

int widthSpec = View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
viewObject.measure(widthSpec, widthSpec);

int height = viewObject.getMeasuredHeight();
int width = viewObject.getMeasuredWidth();

ответил(а) 2015-12-07T08:14:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема