Можно ли использовать стандартный вид в пользовательском LinearLayout

#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 так, как ожидалось.

Кроме того, какова цель пользовательского макета? Может быть лучший способ достичь вашей цели.