是否可以在自定义LinearLayout中使用标准视图

时间:2014-06-17 15:46:49

标签: android android-layout android-canvas

我想以编程方式将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上添加它。

是否可以将View添加到自定义布局中?

EDITTED

我需要用按钮实现一些特殊的UI。我想把它包装在一个组件中。我在画布上绘制UI,并以某种方式添加按钮(这足以让我添加简单的ImageButton,而不是绘制图像和模拟按钮的行为)。这就是我选择Layout作为容器并需要以编程方式添加Views的原因。

1 个答案:

答案 0 :(得分:0)

只要你调用super(可能是super.onDraw()),我想父类会绘制你按预期添加的视图。看起来你只是重写onDraw,这会阻止父LinearLayout类呈现它的内容(如TextView)。

首先尝试注释掉你的onDraw方法,看看LinearLayout是否按预期运行。

此外,自定义布局的目标是什么?可能有更好的方法来实现您的目标。