所以我有一个名为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));
}
}
谢谢!
答案 0 :(得分:2)
您的目标SDK版本是什么?如果它是&gt; = 11,硬件加速使GPU缓存您的视图。尝试在构造函数中调用setLayerType(View.LAYER_TYPE_SOFTWARE, null)
。
答案 1 :(得分:1)
将onMeasure
替换为以下内容:
public void onMeasure(int wms, int hms){
setMeasuredDimension(MeasureSpec.getSize(wms), MeasureSpec.getSize(hms));
}
View中的默认(超级)实现将其大小设置为0x0。
您可能需要根据父级调整值以获得不错的大小。
答案 2 :(得分:0)
如果您的活动的硬件加速为TRUE。 然后尝试禁用该ImageView的硬件加速。
imageview.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
为我工作。