如何在我的自定义视图中使用标准属性android:text?
我写了一个扩展了RelativeLayout
的自定义视图 。 我的观点有文字,所以我想使用标准的android:text
而不需要指定一个<declare-styleable>
并且每次使用我的自定义视图时不使用自定义命名空间xmlns:xxx
。
这是我使用我的自定义视图的xml:
<my.app.StatusBar android:id="@+id/statusBar" android:text="this is the title"/>
我如何获得属性值? 我想我可以得到android:text属性
TypedArray a = context.obtainStyledAttributes(attrs, ???);
但什么是???
在这种情况下(在attr.xml中没有风格的)?
用这个:
public YourView(Context context, AttributeSet attrs) { super(context, attrs); int[] set = { android.R.attr.background, // idx 0 android.R.attr.text // idx 1 }; TypedArray a = context.obtainStyledAttributes(attrs, set); Drawable d = a.getDrawable(0); CharSequence t = a.getText(1); Log.d(TAG, "attrs " + d + " " + t); a.recycle(); }
我希望你有一个想法
编辑
另一种方法(指定声明样式但不必声明自定义名称空间)如下所示:
attrs.xml:
<declare-styleable name="MyCustomView"> <attr name="android:text" /> </declare-styleable>
MyCustomView.java:
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); CharSequence t = a.getText(R.styleable.MyCustomView_android_text); a.recycle();
这似乎是从自定义视图中提取标准属性的通用Android方法。
在Android API中,他们使用内部的R.styleable类来提取标准属性,并且似乎没有提供使用R.styleable来提取标准属性的其他select。
原始post
为了确保您从标准组件获得所有属性,您应该使用以下内容:
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextView); CharSequence t = a.getText(R.styleable.TextView_text); int color = a.getColor(R.styleable.TextView_textColor, context.getResources().getColor(android.R.color.darker_gray)); // or other default color a.recycle();
如果你想从另一个标准组件的属性只是创build另一个TypedArray。
有关标准组件的可用TypedArrays的详细信息,请参阅http://developer.android.com/reference/android/R.styleable.html 。