Android XML布局 - 将属性设置为窗口小部件的另一个属性的值

时间:2018-04-15 12:00:11

标签: android binding

我想将自定义属性(在本例中为app:unfocusColor)设置为另一个属性的值(例如app:cardBackgroundColor),这可能吗? 我尝试以下方法,但有错误

<android.support.v7.widget.CardView
   .....
    app:cardBackgroundColor="@android:color/holo_blue_bright"
    app:unfocusColor="@{app:cardBackgroundColor}"
   >

1 个答案:

答案 0 :(得分:0)

是的,你可以!

例如

创建res / valuesmyattr.xml

将此代码用作内容

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="myatt">
        <attr name="viewName" format="string"/>
    </declare-styleable>
</resources>
您的活动中的

使用此代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        getLayoutInflater().setFactory(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {


        int id =attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android","id",-1);

        if (id == R.id.specialViewId) {
            TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.myatt);
            String viewName = typedArray.getString(R.styleable.myatt_viewName);
        }

        return super.onCreateView(parent, name, context, attrs);
    }

并且您的观点应该与此类似

<TextView
    app:number="1"
    android:id="@+id/specialViewId"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:ignore="MissingPrefix"></TextView>

最后如果你想使用这个而不使用覆盖活动你可以使用LayourInflaterFactory接口