Android自定义View(TextView+Button+一些自定义行为)?

标签 android button view textview

这应该很容易做到,但不知何故在搜索了大约 15 分钟后我仍然无法得到答案:

我想制作一个结合了 TextView 和 Button 的自定义 Android View,再加上一些自定义的行为/方法,假设当我单击按钮时,它应该将 TextView 更改为“Hello, world!”。

我知道我必须扩展 View 类,并在 XML 中设计布局,然后施展魔法将两者联系起来。你能告诉我魔法是什么吗?我知道如何在 Activity 中执行此操作,但不知道如何在自定义 View 中执行此操作。

已编辑 好的,所以我发现我需要使用 Inflater 来使用布局中定义的 subview 来扩展我的类。这是我得到的:

public class MyView extends View  {

private TextView text;
private Button button;

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    View.inflate(context, R.layout.myview, null);
}

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    text = (TextView) findViewById(R.id.text);
    button = (Button) findViewById(R.id.button);
}
}

但是,textbutton subview 为空。任何的想法? (XML 非常简单,没有任何花哨的编辑,我只是​​从 eclipse 工具栏中抓取一个 TextView 和一个 Button 并放入。)

最佳答案

好的,所以我自己的问题的答案是:(i) 去吃晚饭,(ii) 扩展 LinearLayout 而不是 View,这使它成为一个 ViewGroup,因此可以传递给 inflate(...) 方法,但不必覆盖 onLayout(...) 方法。更新后的代码将是:

public class MyView extends LinearLayout  {
    private TextView text;
    private Button button;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View.inflate(context, R.layout.myview, this);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        text = (TextView) findViewById(R.id.text);
        button = (Button) findViewById(R.id.button);
    }
}

关于Android自定义View(TextView+Button+一些自定义行为)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781218/

相关文章:

java - Android 上的自定义 View 和窗口属性

android - 如何对LiveData转换进行单元测试

安卓 : Alert Dialog validation proper way

android - CameraX beta03 和 Bottom Sheet 滚动问题

javascript - 如何使单元格中的表格成为变量?

mysql - 如何制作每个订单税费的 MySQL View

java - 如何使用 jorda 时间将时区转换为 UTC 时区

c# - 在 asp.net c# 中选择开始和结束日期后,在另一个文本框中自动生成天数

android - 如何以编程方式在 Android 的按钮中缩放或自动调整 Drawable Top 的图像?

android - 手势识别器和 AndEngine (Android)