如果你想設置的寬度和高度在運行時手動,之後進行查看已經被佈局系統測量搶到的ImageView的LayoutParams參考。如果在呈現階段做這個太早,你的觀點的寬度和高度以及它的父視圖等將是0
我有一個開源庫,可以幫助你一些代碼。該過程分爲兩部分:
- 設置附加到ViewTreeObserver的OnPreDrawListener作爲控件。我的例子是在一個自定義控件裏面做的,但是你也可以在你的活動中做到這一點。
- 裏面的onPreDraw方法,你的形象和它的父母現在都分配有其寬度和高度值。您可以進行計算,然後手動將寬度和/或高度設置爲視圖的LayoutParams對象(不要忘記將其設置回)。
看看這個例子,我將一個寬高比應用到自定義的ImageView中,然後再渲染到屏幕上。我不知道這是否恰好適合你的使用情況,但這將展示如何將OnPreDrawListener添加到ViewTreeObserver,取出當你完成,並在運行時
https://github.com/aguynamedrich/beacon-utils/blob/master/Library/src/us/beacondigital/utils/RemoteImageView.java#L78
應用動態調整大小的視圖
這是一個修改後的版本,可以刪除我特定的調整大小邏輯。 layout_width =「到:這也從ImageView的,這是一個更可能的情況,如果你不打算使用一個自定義的控制,你只希望做這
private void initResizeLogic() {
final ViewTreeObserver obs = imageView.getViewTreeObserver();
obs.addOnPreDrawListener(new OnPreDrawListener() {
public boolean onPreDraw() {
dynamicResize();
obs.removeOnPreDrawListener(this);
return true;
}
});
}
protected void dynamicResize() {
ViewGroup.LayoutParams lp = imageView.getLayoutParams();
// resize logic goes here...
// imageView.getWidth() and imageView.getHeight() now return
// their initial layout values
lp.height = someCalculatedHeight;
lp.width = someCalculatedWidth;
imageView.setLayoutParams(lp);
}
}
設置我的'機器人活動抓起ViewTreeObserver一個固定值「'然後我的''android:layout_height =」wrap_content「'。 – elL 2013-04-04 11:36:32