我有一个自定义视图,在布局中有两个文本视图。我们称一个key和另一个value

所以您知道TextView的情况如何?

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="Preview text shown in the layout editor" />


我想对自定义视图执行类似的操作,例如:

<com.package.whatever.MyCustomView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:key_preview="Preview text for the key"
    app:value_preview="Preview text for the value" />


MyCustomView的构造函数如下:

public MyCustomView(Context context, AttributeSet attrs) {
    super(context, attrs);

    ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
            .inflate(R.layout.my_custom_view, this, true);

    key = (TextView) findViewById(R.id.key);
    value = (TextView) findViewById(R.id.value);

    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0);
    try {
        if (isInEditMode()) {
            key.setText(a.getText(R.styleable.MyCustomView_key_preview));
            value.setText(a.getText(R.styleable.MyCustomView_value_preview));
        }
        key.setText(a.getText(R.styleable.MyCustomView_key));
        value.setText(a.getText(R.styleable.MyCustomView_value));
    } finally {
        a.recycle();
    }
}


attrs.xml

<declare-styleable name="MyCustomView">
    <attr name="key" format="string" />
    <attr name="key_preview" format="string" />
    <attr name="value" format="string" />
    <attr name="value_preview" format="string" />
</declare-styleable>


问题是,当我在布局编辑器中查看包含isInEditMode()的布局时,false返回MyCustomView。如果我添加app:key="yay"可以正常工作,但对于app:key_preview="nay :("则什么也没有显示。

是什么赋予了?

最佳答案

我是丁格,对你们都撒谎。 isInEditMode()没有返回false。

咳嗽:

    if (isInEditMode()) {
        key.setText(a.getText(R.styleable.MyCustomView_key_preview));
        value.setText(a.getText(R.styleable.MyCustomView_value_preview));
    } else {
        key.setText(a.getText(R.styleable.MyCustomView_key));
        value.setText(a.getText(R.styleable.MyCustomView_value));
    }


事实证明,我最初实际上是将键设置为app:key_preview的值,但是随后它又被null返回的a.getText(R.styleable.MyCustomView_key)覆盖。

voopz。

10-04 19:05