简单的自定义类扩展视图

Posted

技术标签:

【中文标题】简单的自定义类扩展视图【英文标题】:simple custom class extends view 【发布时间】:2011-03-21 11:09:59 【问题描述】:

我想创建一个自定义视图类。但是运行应用程序时出现错误。

这是我的课:

package test.start;

import android.util.AttributeSet;
import android.view.*;
import android.graphics.*;
import android.content.Context;

public class control extends View
    private Paint paint;

    public control(Context context, AttributeSet attrs, int defStyle)
        super(context, attrs, defStyle);
        init();
    

    public void init()
        paint = new Paint();
        paint.setTextSize(12);
        paint.setColor(0xFF668800);
        paint.setStyle(Paint.Style.FILL);
    

    @Override
    protected void onDraw(Canvas canvas) 
        canvas.drawText("TEEEST", 100, 100, paint);
    

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
        this.setMeasuredDimension(150,200);     
    

和 main.XML

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        android:layout_ 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_ android:orientation="vertical">
        <TextView android:id="@+id/textView1" android:text="@string/text" android:layout_ android:layout_></TextView>
        <TableLayout android:layout_ android:layout_ android:id="@+id/tableLayout1">
            <Button android:id="@+id/button2" android:layout_ android:layout_ android:text="Button" android:background="@drawable/custom_button" android:layout_weight="1"></Button>
            <Button android:layout_  android:id="@+id/button1" android:layout_ android:text="@string/button" android:layout_weight="1"></Button>
            <test.control 
              android:id="@+id/control" 
              android:layout_ 
              android:layout_> </test.control>
        </TableLayout>
    </LinearLayout>

错误信息:

无法开始活动 组件信息de.me.start/test.start.StartActivitiy: android.view.InflateException:二进制 XML 文件第 10 行:膨胀错误 类 test.start.control 块引用

但我可以在图形布局中查看控件。

【问题讨论】:

【参考方案1】:

尝试提供其他版本的构造函数:

public control(Context context, AttributeSet attrs) 
    super(context, attrs);
    init();

【讨论】:

【参考方案2】:

你应该通过以下方式在 XML 中声明它:

<view class="de.test.start.control"
              android:id="@+id/control" 
              android:layout_ 
              android:layout_> </view>

【讨论】:

我做到了。是否有任何示例项目,具有预定义的类扩展视图? @Passy 你好,Passy,你找到你搜索过的任何示例项目了吗?...如果有的话,请与我们分享。谢谢

以上是关于简单的自定义类扩展视图的主要内容,如果未能解决你的问题,请参考以下文章

带有来自模型的自定义验证消息的 Django 1.5 基于类的视图

IOS 为啥一个视图有2个自定义类?

Spring Boot - 如何通过实现 BeforeAllCallback 的自定义扩展类设置或覆盖 application.yml 中定义的属性?

Visual Studio中智能指针对象的自定义视图?

Objective C - 带有动画的自定义 UIView 类初始化

将 UIScrollView 委托设置为它自己的自定义类