1

我已经创建了一个按钮并用于addView()onClickListener(). 但是如果图表超出范围,它不会自动扩展视图高度。所以我想在绘制所有图表后添加视图高度。我尝试使用getLayoutParams().height来修改高度,但它不起作用。

public class MainActivity extends Activity {
     private TableLayout layout;
     private Button btnDraw;
     public void onCreate(Bundle savedInstanceState){
           layout=findViewById((TableLayout) findViewById(R.id.tableLayout));
           btnDraw=findViewById((Button) findViewById(R.id.btnDraw));
           btnDraw.setOnClickListener(new OnClickListener(){
                   public void onClick(View arg0) {
                          layout.addView(new Chart(MainActivity.this)
                   }
           });
     }

     class Chart extends View {
           public void onDraw(Canvas c) {                 
                   int addHeight=0;     
                   for(...){ //draw several chart
                        ...
                        addHeight+=500;

                   }
                   FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) layout.getLayoutParams();
                   params.height += addHeight;
                   layout.setLayoutParams(params); 
           }
     }
}

这是xml代码

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
        <TableLayout
        android:id="@+id/tableLayout" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:stretchColumns="1">
        <TableRow>
            <Button
                android:id="@+id/btnDraw"
                android:layout_span="2" 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Draw" />

        </TableRow>
            ...
    </TableLayout>
</ScrollView>

我也尝试onMeasure(getWidth(),addHeight)在 for 循环之外调用,但它仍然不起作用。

 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(widthMeasureSpec, widthMeasureSpec);
 }
4

1 回答 1

0

如果你想用八种方式来实现,你的Chart类应该实现。onMeasure()如果它只是一个 hack,你可以使用AbsoluteLayout。您也可以设置布局参数,但您应该调用updateViewLayout(),甚至可能调用requestLayout().

于 2012-11-20T11:54:14.557 回答