Создать графическое представление программно без макета
Я пытаюсь создать ImageView в коде, установив ресурс image, а затем добавить ImageView в качестве дочернего представления в мой основной вид. Все примеры, которые я нашел, использовали макет для этого. Но внутри конструктора моего представления я не могу понять, как это сделать.
Вот фрагменты кода:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CanvasView(this));
}
}
Вид:
public class CanvasView extends SurfaceView implements SurfaceHolder.Callback {
public CanvasView(Context context) {
super(context);
SurfaceHolder sh = getHolder();
sh.addCallback(this);
ImageView iv = new ImageView(context);
iv.setImageResource(R.drawable.wand);
// how to add iv to myself?
}
}
2 ответа:
Вы не можете сделать это таким образом. вам нужен контейнер для обоих: например
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyContainer(this)); } } public class MyContainer extends LinearLayout { public MyContainer(Context context) { addView(new CanvasView(context)); ImageView iv = new ImageView(context); iv.setImageResource(R.drawable.wand); addView(iv); } }
Помните, что если вам нужно раздуть представление непосредственно из xml-файла, то для обоих
MyContainer
иCanvasView
конструктор, который принимает в качестве параметровContext
иAttributeSet
Это зависит от макета, который вы используете, вот какой-то код там все представления создаются программно.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout rootLayout = new LinearLayout(getApplicationContext()); rootLayout.setOrientation(LinearLayout.VERTICAL); ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageResource(R.drawable.sample); rootLayout.addView(imageView); setContentView(rootLayout); }