【问题标题】:How to instantiate multiple custom views in Android?如何在 Android 中实例化多个自定义视图?
【发布时间】:2013-11-05 11:55:46
【问题描述】:

我真的对自定义视图感到困惑。

我需要定义一个自定义视图,由一个ImageView 和一个TextView 组成。然后我想根据我已经完成的 php json 响应更改此视图的内容。

首先,我应该走哪条路:

1) 将自定义视图定义为 XML,然后“膨胀”、复制等,然后更改新实例化的文本和图像源等?

2) 将自定义视图定义为 Java 类,并实例化它?

最后,我想将我的自定义视图实例化为垂直布局的子视图。

我目前正在尝试的是路径 #2。我定义了这个类:

public class ArizaSatiri extends LinearLayout { 
    TextView arizaTitle;    
    //constructor :
    public ArizaSatiri(Context context, AttributeSet attrs)
    {
        super(context, attrs);        
        // add title , description etc : 
        arizaTitle = new TextView(context);
        arizaTitle.setText("abcef defefef");
        this.addView(arizaTitle);        
    }    
}

然后我在我的主要活动中尝试了这个:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_arizalarim);

        ArizaSatiri as = new ArizaSatiri(getApplicationContext(), attrSet);
    }

但我不知道如何构造一个 AttributeSet。

所以请告诉我,我应该选择哪条路径,以及如何完成动态实例化自定义视图的次数?

【问题讨论】:

    标签: java android xml view android-custom-view


    【解决方案1】:

    属性集是在您通过 xml 添加组件时构建的。您必须在 attrs.xml 中定义自定义组件的属性。 (http://www.vogella.com/articles/AndroidCustomViews/article.html#additional_attributes)

    如果您不想从 xml 创建视图,那么只需从构造函数中删除属性集,因为 LinearLayout 有一个没有属性集的构造函数:http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context)

    【讨论】:

    • 如果我使用带有单个(上下文)参数的构造函数,我能保证安全吗?如果是这样,太好了:) 我可以在构造函数内部(或之后)添加 layoutParams,对吧?
    • “安全”是什么意思?它会正常工作。例如见startandroid.ru/en/lessons/complete-list/…你可以在调用super之后添加layoutParams。您甚至可以创建构造函数: public ArizaSatiri(Context context, LayoutParams params) {super(context);设置布局参数(参数); }.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多