0

テーブルに追加したいSquareというカスタムビューがあります。正方形をテキストビューに置き換えると、完全に機能します。

オンラインでかなり検索したところ、コンストラクターで setWillNotDraw(false) を呼び出す必要があることがわかりました。私はこれをしても結果はありませんでした。

ここに私のクラススクエアがあります:

public class Square extends View
{
    private String courseName;
    private String className;
    private String place;
    private Weekdays weekday;
    private int hour;
    private Paint paint;

    public Square(Context context, AttributeSet attrs){
        super(context,attrs);
        setWillNotDraw(false);
    }
    public Square(Context context, String courseName, String className, String place, Weekdays weekday, int hour)
    {
        super(context);

        this.courseName = courseName;
        this.className = className;
        this.place = place;
        this.weekday = weekday;
        this.hour = hour;

        setWillNotDraw(false);

        paint = new Paint();
    }

    public Square(Context context,Weekdays weekdays, int i) {
        super(context);
        this.weekday = weekdays;
        this.hour = i;

        setWillNotDraw(false);

        paint = new Paint();
        paint.setColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {       
        super.onDraw(canvas);

        canvas.drawText("Hello I'm a test", 1, 30, paint);

    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);


    }

onMeasure() メソッドを 10,10 などを使用するように設定しようとしましたが、何も表示されません。これが私の問題に関連しているかどうかはわかりません。

テーブルは次のように動的に作成されます。

public class MainActivity extends Activity {

private Controller controller;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    controller = new Controller(this);

    createTable();

}


private void createTable() {

     // get a reference for the TableLayout
    TableLayout table = (TableLayout) findViewById(R.id.tableLayout1);

    /**Create 8 rows*/
    for(int i=0;i<Controller.TABLE_ROW_COUNT;i++){
        // create a new TableRow
        TableRow row = new TableRow(this);

         /** create 5 columns*/
        for(int j=0;j<Controller.TABLE_COLUMN_COUNT;j++){
            Square sq = controller.tableModel.getSquare(Weekdays.values()[j], i);
            row.addView(sq, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        }
        // add the TableRow to the TableLayout
        table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    }

}

ありがとう!

4

3 に答える 3

2

ターゲットの SDK バージョンは何ですか? >= 11 の場合、ハードウェア アクセラレーションが GPU にビューをキャッシュさせています。setLayerType(View.LAYER_TYPE_SOFTWARE, null)コンストラクターを呼び出してみてください。

于 2012-11-13T15:10:59.377 に答える
1

onMeasureを次のものに置き換えます。

public void onMeasure(int wms, int hms){
    setMeasuredDimension(MeasureSpec.getSize(wms), MeasureSpec.getSize(hms));
}

View のデフォルト (スーパー) 実装は、そのサイズを 0x0 に設定します。

親に応じて適切なサイズを取得するには、値を調整する必要がある場合があります。

于 2013-02-26T15:37:44.913 に答える