我遇到了問題。動態添加TableRow與getMeasuredHeight/getHeight的問題
我希望動態地將行添加到TableLayout
。添加這些行時,我需要能夠獲得視圖的大小,因此我試圖在onSizeChanged()
期間執行此操作,但新行不顯示。所以我試過onFinishInflate()
,但是我沒有權限訪問(getMeasuredHeight returns 0)
的大小。
以下代碼的輸出顯示兩行initial row
+ onFinishInflate getMeasuredHeight=0
。但如果我使用從SDK的hierarchyviewer,並按load view hierarchy
然後我突然看到3行在模擬器initial row
+ onFinishInflate getMeasuredHeight=0
+ onSizeChanged getMeasuredHeight=270
!。
注:這是使用模擬器2.1 hvga景觀,代碼內置 最新sdk,瞄準android1.5。
<?xml version="1.0" encoding="utf-8"?>
<com.steelbytes.android.TableHeightTest.TestLinLay
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout
android:id="@+id/table1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:text="initial row"
/>
</TableRow>
</TableLayout>
</com.steelbytes.android.TableHeightTest.TestLinLay>
package com.steelbytes.android.TableHeightTest;
import android.app.Activity;
import android.os.Bundle;
public class TableHeightTest extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
package com.steelbytes.android.TableHeightTest;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class TestLinLay extends LinearLayout
{
Context mContext;
public TestLinLay(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
}
private void addRow(String funcName)
{
TableLayout tl = (TableLayout)findViewById(R.id.table1);
TableRow tr = new TableRow(mContext);
TextView tv = new TextView(mContext);
tv.setText(funcName+" getMeasuredHeight="+tl.getMeasuredHeight());
tr.addView(tv);
tl.addView(tr);
}
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
addRow("onFinishInflate");
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w,h,oldw,oldh);
addRow("onSizeChanged");
}
}
忘了提,增加requestLayout()的調用和/或無效()沒有幫助。 – SteelBytes 2010-02-24 06:01:12