Я пытаюсь добавить два вида с холстами в свою деятельность программно, но похоже, что добавляется только первый (я могу сказать, посмотрев на вывод консоли). Что я делаю не так?Android добавляет два вида с холстами программным способом
Вот мой код:
package app.com.example.android.drawtwoviews;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
DrawView drawView;
DrawView2 drawView2;
private LinearLayout root;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
root = new LinearLayout(this);
root.setOrientation(LinearLayout.VERTICAL);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
root.addView(drawView);
drawView2 = new DrawView2(this);
drawView2.setBackgroundColor(Color.WHITE);
root.addView(drawView2);
setContentView(root);
}
public class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
System.out.println("DrawView1");
paint.setColor(Color.BLACK);
//paint.setStrokeWidth(3);
canvas.drawRect(30, 30, 80, 80, paint);
}
}
public class DrawView2 extends View {
Paint paint = new Paint();
public DrawView2(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
System.out.println("DrawView2");
paint.setColor(Color.BLUE);
paint.setStrokeWidth(3);
canvas.drawRect(300, 300, 400, 400, paint);
}
}
}
Это отлично работает! Я хотел бы удостовериться, что, когда я установил параметр height (of LayoutParams) равным 0, я фактически устанавливаю высоту до минимума, который займет холст. – Naci
Настройка 0 для 'LayoutParams.height' работает только потому, что есть _also_' LayoutParams.weight'. Высота 0 - это способ сказать «идти только по макету». Если вы хотите иметь минимальный размер в DrawViews, вы должны добавить реализацию onMeasure(), чтобы LinearLayout мог получить свой минимальный размер, используйте 'height = LayoutParams.WRAP_CONTENT' в одном LayoutParams DrawView и' height = 0, weight = 1' на другой DrawViewParams DrawView. – Barend