我有以下观点:
<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
答案 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();