0

カスタム キーボードに HUD ディスプレイを実装しようとしています。HUD には、キーと値のペアが含まれます。プログラムで TableLayout を作成し、キャンバスに描画する必要があります。これを行うために、keyboardview onDraw() メソッドをオーバーライドしています。

@Override
public void onDraw(Canvas canvas) {  // In the custom MyKeyboardView class
    MyHUD hud = new MyHUD(getContext());
    super.onDraw(canvas);
    hud.tl.draw(canvas);    //tl being the TableLayout to draw
}

MyHUD クラス:

public class MyHUD {

    public TableLayout tl;
    private MyData mData;

    public MyHUD(Context context) {

      TableRow.LayoutParams trParams = new TableRow.LayoutParams(
        TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
      TableLayout.LayoutParams tlParams = new TableLayout.LayoutParams(
        TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);

      tl = new TableLayout(context);
      tl.setLayoutParams(tlParams);

      for (int i = 0; i < 10; i++) {

        TableRow tr = new TableRow(context);
        tr.setId(100+i);
        tr.setLayoutParams(trParams);

        TextView charTV = new TextView(context);
        charTV.setId(200+i);
        charTV.setText("Hello " + i);
        charTV.setTextColor(Color.RED);
        //charTV.setLayoutParams(trParams);
        tr.addView(charTV);

        TextView keyTV = new TextView(context);
        keyTV.setId(300+i);
        keyTV.setText("world " + i);
        keyTV.setTextColor(Color.CYAN);
        //keyTV.setLayoutParams(trParams);
        tr.addView(keyTV);

        tl.addView(tr, tlParams);   
      }       
   }
}

(現在、データの取得は行われておらず、テスト用の「Hello world」のみであることに注意してください)。他のいくつかの投稿で見られるように、TextView レイアウトをコメントアウトしましたが、それは問題ではないようです。


代替オプション:

コンストラクターを介して TableLayout をインスタンス化する代わりに、次のようなことを試しました。

tl = (TableLayout) findViewById(R.id.my_hud);

次の XML とともに:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="0,1"
        android:id="@+id/my_hud" >
</TableLayout>

問題は、カスタム クラスで findViewById メソッドが定義されていないことです。

TableLayout を適切に描画していない理由は何ですか?

4

1 に答える 1

0

こんなに簡単だとは思いませんでしたが、欠けていたのは次のとおりです。

    hud.tl.measure(canvas.getWidth(), canvas.getHeight());
    hud.tl.layout(0, 0, canvas.getWidth(), canvas.getHeight());

これで、TableLayout が適切に描画されます。成功。

于 2012-06-01T12:21:25.520 に答える