我正在尝试展示MyCustomLinearLayout
扩展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
的宽度太小了。
答案 0 :(得分:9)
这不是你如何覆盖onMeasure
方法,尤其是默认SDK布局。现在使用您的代码,您只需将MyCustomLinearLayout
平方分配给它一定值。但是,你没有测量它的孩子,所以它们没有大小,也没有出现在屏幕上。
我不确定这会有用但是试试这个:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int size = getMeasuredHeight();
super.onMeasure(MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY));
}
当然这基本上会完成onMeasure
两次的工作,但ImageView
现在应该可以填充它的父级了。还有其他解决方案,但你的问题在细节上有点稀缺。