我试图展示一个MyCustomLinearLayout
which extends LinearLayout
。我MyCustomLinearLayout
用android:layout_height="match_parent"
属性夸大了。我想要的是ImageView
在这个MyCustomLinearLayout
. 这个的高度ImageView
应该是match_parent
,宽度应该等于高度。我试图通过覆盖该onMeasure()
方法来实现这一点。发生的情况是,它MyCustomLinearLayout
确实像它应该的那样变成了正方形,但ImageView
没有显示出来。
在我使用的代码下方。请注意,这是我的问题的一个极其简化的版本。将ImageView
被更复杂的组件取代。
public MyCustomLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.view_myimageview, this);
setBackgroundColor(getResources().getColor(R.color.blue));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);
setMeasuredDimension(height, height);
}
view_myimageview.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<ImageView
android:id="@+id/view_myimageview_imageview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_launcher" />
</merge>
因此,当我覆盖该onMeasure()
方法时,ImageView
不显示,当我不覆盖该onMeasure()
方法时,ImageView
显示,但是太小了,因为MyCustomLinearLayout
' 的宽度太小了。