#android #android-layout #android-canvas
#Android #android-layout #android-холст
Вопрос:
Я хотел бы программно добавить TextView и EditView в свой пользовательский LinearLayout. Но я не знаю как. Что-то вроде этого (это не работает):
<com.custom.FavoritesViewer
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:id="@ id/favoritesViewer">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"/>
</com.custom.FavoritesViewer>
и мой пользовательский макет
public class FavoritesViewer extends LinearLayout {
private Bitmap fullImage;
private int canvasWidth;
private int canvasHeight;
private final Paint paint = new Paint();
public FavoritesViewer(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(false);
initializeCanvasSize(context);
}
private void initializeCanvasSize(Context context) {
final Pair<Integer, Integer> screenSize = Utils.getScreenSize(context);
canvasWidth = screenSize.first;
canvasHeight = screenSize.second;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(canvasWidth, canvasHeight / 3);
}
@Override
protected void onDraw(Canvas cvs) {
if (fullImage == null) {
fullImage = Bitmap.createBitmap(canvasWidth, canvasHeight / 3, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(fullImage);
paint.reset();
paint.setColor(Color.parseColor("#AA000000"));
canvas.drawRect(0, 0, canvasWidth, canvasHeight / 3, paint);
}
cvs.drawBitmap(fullImage, 0, 0, null);
}
}
Итак, у меня есть холст (например, фон), и я хотел бы добавить несколько стандартных представлений сверху. Я не могу добавить его в onDraw.
Есть ли способ добавить представление в пользовательский макет?
ОТРЕДАКТИРОВАНО
Мне нужно реализовать какой-то специальный пользовательский интерфейс с кнопками. Я хочу обернуть это в один компонент. Я рисую этот пользовательский интерфейс на холсте и каким-то образом должен добавлять кнопки (мне достаточно добавить простой ImageButton, а не рисовать изображение и эмулировать поведение кнопки). Вот почему я выбрал Layout в качестве контейнера и должен добавлять представления программно.
Комментарии:
1. Вы понимаете, что существует метод addView()? Возможно, прочитайте некоторую документацию… developer.android.com/reference/android/view /… , int, android.view.ViewGroup. LayoutParams)
Ответ №1:
Пока вы вызываете super (возможно, super.onDraw()) , я полагаю, что родительский класс будет отображать добавленные вами представления, как и ожидалось. Похоже, вы просто переопределяете onDraw, что помешало бы родительскому классу LinearLayout отображать его содержимое (например, TextView).
Сначала попробуйте прокомментировать свой метод onDraw и посмотрите, ведет ли себя LinearLayout так, как ожидалось.
Кроме того, какова цель пользовательского макета? Может быть лучший способ достичь вашей цели.