getLayoutParams.width vs getWidth()

时间:2015-12-07 05:09:14

标签: android

我有以下观点:

<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

问题是,我divider.getLayoutParams().width获得-1,而divider.getWidth()的值是正确的(即剩余的秒数)

我需要在秒数通过时动态更改视图的宽度。 divider.setLayoutParams().width是一个很好的选择。但是,它没有改变布局宽度,仍然保持-1

2 个答案:

答案 0 :(得分:3)

当宽度为getLayoutParams().width时,

MATCH_PARENT返回-1。 getLayoutParams().width可以是FILL_PARENT(由{8}中的MATCH_PARENT替换)或WRAP_CONTENT或确切大小。但getWidth()始终以像素为单位返回宽度。

答案 1 :(得分:0)

尝试使用以下代码。

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

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