自定义视图无显示 - Android

时间:2017-08-17 17:37:30

标签: android android-custom-view

我在Android中进行自定义视图。它是LinearLayout中2个TextView的简单组合。

CKEDITOR.replace('editor1', {
    on: {
        instanceReady: function(evt) {
            document.getElementById('board').style.visibility = 'hidden';
        }
    }
});

我的自定义类如下:

__________________________________
|TextView        |TextView       |
----------------------------------

}

这是我的attr集:

public class Label extends View {

private TextView label, display;
LinearLayout layout;

public Label(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray a = context.getTheme().obtainStyledAttributes(
            attrs,
            R.styleable.Label,
            0,0
    );
    try{
        layout = new LinearLayout(context);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT

        );
        layout.setPadding(4,4,4,4);
        layout.setLayoutParams(params);
        layout.setOrientation(LinearLayout.VERTICAL);
        label = new TextView(context);
        label.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        display = new TextView(context);
        display.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        label.setText(a.getString(R.styleable.Label_label_text));
        display.setText(a.getString(R.styleable.Label_display_text));
        layout.addView(label);
        layout.addView(display);
    }finally{
        a.recycle();
    }
}

public void setDisplay(String displayText){
    display.setText(displayText);
    invalidate();
    requestLayout();
}

public void setLabel(String labelText){
    label.setText(labelText);
    invalidate();
    requestLayout();
}

这就是我添加它的方式:

<resources>
    <declare-styleable name="Label">
        <attr name="label_text" format="string"/>
        <attr name="display_text" format="string"/>
        <attr name="drawable" format="color"/>
        <attr name="label_position" format="enum">
            <enum name="left" value="-1"/>
            <enum name="center" value ="0"/>
            <enum name="right" value="1"/>
        </attr>
        <attr name="display_position" format="enum">
            <enum name="left" value="-1"/>
            <enum name="center" value ="0"/>
            <enum name="right" value="1"/>
        </attr>
    </declare-styleable>
</resources>

但是在预览屏幕上我什么都看不到。这不是画画。当我启动应用程序时,它什么也没显示。我错过了什么?

1 个答案:

答案 0 :(得分:2)

您的LinearLayout与自定义视图无关。您只需在自定义视图的构造函数中创建LinearLayout,但不要将它们绑定在一起。您应该扩展LinearLayout而不是View,因为这是您的父视图。然后使用this.addView()而不是使用layout.addView()。如果你不设法这样做,请告诉我。