我想将自定义属性(在本例中为app:unfocusColor)设置为另一个属性的值(例如app:cardBackgroundColor),这可能吗? 我尝试以下方法,但有错误
<android.support.v7.widget.CardView
.....
app:cardBackgroundColor="@android:color/holo_blue_bright"
app:unfocusColor="@{app:cardBackgroundColor}"
>
答案 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接口