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>

for ループの外側でも呼び出しを試みonMeasure(getWidth(),addHeight)ますが、まだ機能しません。

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

1 に答える 1

0

8通りにしたい場合は、Chartクラスを実装する必要があります。onMeasure()それが単なるハックである場合は、AbsoluteLayoutを使用できます。レイアウト パラメータを設定して遊ぶこともできますがupdateViewLayout()、おそらく とを呼び出す必要がありますrequestLayout()

于 2012-11-20T11:54:14.557 に答える