android – 使用XML Layout作为View Subclass的视图?

前端之家收集整理的这篇文章主要介绍了android – 使用XML Layout作为View Subclass的视图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我觉得好像我曾经知道如何做到这一点,但我现在正在画一个空白.我有一个从View(Card)扩展的类,我用 XML编写了一个布局.我想要做的是将View of Card设置为构造函数中的XML View,因此我可以使用Card中的方法来设置TextViews等等.有什么建议?代码如下:

Card.java:
(我有View.inflate(context,R.layout.card_layout,null);这是我想要做的一个例子,但它不起作用.我基本上希望该类成为View的接口,并按顺序要做到这一点,我需要以某种方式将XML布局分配给View.我是否使用了setContentView(View视图)这样的东西?View类中没有这样的方法,但有类似的东西吗?)

public class Card extends View {

    TextView tv;

    public Card(Context context) {
        super(context);
        View.inflate(context,null);
        tv = (TextView) findViewById(R.id.tv);
    }

    public Card(Context context,AttributeSet attrs,int defStyle) {
        super(context,attrs,defStyle);
        View.inflate(context,AttributeSet attrs) {
        super(context,attrs);
        View.inflate(context,null);
        tv = (TextView) findViewById(R.id.tv);
    }

    public void setText(String text) {
        tv.setText(text);
    }

}

card_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="336dp"
    android:layout_height="280dp"
    android:layout_gravity="center"
    android:background="@drawable/card_bg"
    android:orientation="vertical" >


    <TextView
        android:id="@+id/tv"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:textSize="24dp"
    />

</LinearLayout>

解决方法

当前的设置无法实现您想要做的事情.视图(或其直接子类)表示单个视图,它没有子视图的概念,您正在尝试执行的操作. LayoutInflater不能与简单的View一起使用,因为简单的View类没有实际添加子项的方法(如addView()方法).

另一方面,用于生成子代的正确类是ViewGroup(或其中一个直接子类,如LinearLayout,FrameLayout等),它通过提供addView方法接受向其添加Views或其他ViewGroups.最后你的班级应该是:

public class Card extends ViewGroup {

    TextView tv;

    public Card(Context context) {
        super(context);
        View.inflate(context,this);
        tv = (TextView) findViewById(R.id.tv);
    }

    public Card(Context context,this);
        tv = (TextView) findViewById(R.id.tv);
    }

    public void setText(String text) {
        tv.setText(text);
    }

}

如果我记得你扩展ViewGroup时必须覆盖onLayout,那么相反(并且由于你的布局文件),你应该看看扩展LinearLayout并用xml布局替换带有merge标签的LinearLayout.

猜你在找的Android相关文章