ここHorizontalListView
で提供されているものを使用しており、次のように、高さと幅が固定されたカスタムビューを表示しようとしています。
public class MyView extends View {
public MyView(Context context) {
super(context);
init();
}
private void init() {
setBackgroundColor((int) (Math.random() * Integer.MAX_VALUE));
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
int h = getHeight(); // shows 255, correct height
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int w = MeasureSpec.makeMeasureSpec(425, MeasureSpec.EXACTLY);
int h = MeasureSpec.makeMeasureSpec(255, MeasureSpec.EXACTLY);
super.onMeasure(w, h);
}
}
これをMyView
通常LinearLayout
で表示すると、高さと幅が完璧になります。ただし、でビューを表示するHorizontalListView
と、幅は完璧ですが、高さは完璧ではありません。このスクリーンショットを参照してください:
幅は425pxで、これは正しいです。高さは255ではなく160pxです。
ソースにHorizontalListView
は次の方法があります。
private void addAndMeasureChild(final View child, int viewPos) {
LayoutParams params = child.getLayoutParams();
if(params == null) {
params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}
addViewInLayout(child, viewPos, params, true);
child.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
}
この方法で変更する必要があるものはありますか、それともこれを機能させるために他に何かありますか?