如何在我的自定义视图中使用标准属性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