0
我具有被重寫onLayout方法的定製組件如下:定製組件佈局順序
@Override
public void onLayout(boolean changed, int left, int top, int right, int bottom) {
int[] location = new int[2];
this.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
int w = this.getWidth();
int h = y+(8*CELL_HEIGHT);
updateMonthName();
initCells();
CELL_MARGIN_LEFT = 0;
CELL_MARGIN_TOP = monthNameBounds.height();
CELL_WIDTH = w/7;
setFrame(x, y, x+w, h);
super.onLayout(true, x, y, w, h);
}
然而,在LinearLayout中使用該組件時,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:padding="10dp"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView above"
android:textSize="15sp"
/>
<com.project.calenderview.CalendarView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView below"
android:textSize="15sp"
/>
</LinearLayout>
佈局是呈現使得textview上面的「TextView」是第一個,「TextView下面」是第二個,然後是我的組件,它預計在兩者之間的中間。
編輯: 這裏也是的onDraw:
@Override
protected void onDraw(Canvas canvas) {
// draw background
super.onDraw(canvas);
//Draw month name
canvas.drawText(monthName, (this.getWidth()/2) - (monthNameBounds.width()/2), monthNameBounds.height() + 10, monthNamePaint);
//Draw arrows
monthLeft.draw(canvas);
monthRight.draw(canvas);
// draw cells
for(Cell[] week : mCells) {
for(Cell day : week) {
if(day == null) continue;
day.draw(canvas);
}
}
}
它是什麼,我做錯了什麼?
感謝
top&bottom是完全相同的值= 47,這意味着高度爲零......這就是爲什麼我決定計算自己的價值。有什麼理由呢? – Maverick
是您的自定義組件擴展ViewGroup或只是查看? – Budius
我將ImageView擴展爲更具體的 – Maverick