在我的自定义视图上读取 Android 个属性
Reading Android attributes on my custom view
我创建了自定义布局 class(扩展了 RelativeLayout)并将 TextView 作为布局的一部分。
我想将 XML 中声明的属性应用到我的 TextView,无论如何我可以读取 android 属性(不是我的自定义属性,那部分已经处理好了)。
例如,在我的 XML 中,我会有这个:
<my.custom.MyLayout
android:layout_width="100dp"
android:layout_height="20dp"
android:text="SomeText" />
我想读取文本属性并将其应用到我的 TextView(目前它正在应用到 RelativeLayout)而不是创建我自己的属性并读取它。
我的自定义布局是这样的:
public class MyLayout extends RelativeLayout {
private TextView textView;
public void MyLayout(final Context context, final AttributeSet attrs) {
/**Read android attributes and apply it to TextView **/
??
}
我目前的解决方案是创建自定义属性并读取它们,但我觉得这不是一个好的解决方案,因为我将复制声明到 TextView 的每个属性。
有关我当前解决方案的更多信息。
我有一个名为 myText 的自定义属性,我用它来将 XML 中声明的文本应用到我的 TextView。
在我的布局中 XML :
myNameSpace:myText="SomeText"
并在我的 Java class 中阅读:
String text= a.getString(R.styleable.MyStyleable_myText);
textView.setText(text);
我希望摆脱我的自定义属性并阅读 "android:" 个属性。
首先,我不确定设置 android:text
是否可以用于视图扩展 RelativeLayout
。如果可能的话,像 TextView
实现中那样做:
final Resources.Theme theme = context.getTheme();
a = theme.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
text = a.getText(attr);
所以基本上这与您获取自定义属性的方式相同,但具有不同的样式。
如果它不起作用,我会考虑另一种方法。我为我的一个自定义视图做了这件事。由于您的自定义视图中有一个 TextView
,您可以在 XML 中创建它,然后在您的自定义视图中获取对该子项的引用。
<YourCustomView>
<TextView android:text="someText"/>
<YourCustomView/>
我创建了自定义布局 class(扩展了 RelativeLayout)并将 TextView 作为布局的一部分。
我想将 XML 中声明的属性应用到我的 TextView,无论如何我可以读取 android 属性(不是我的自定义属性,那部分已经处理好了)。
例如,在我的 XML 中,我会有这个:
<my.custom.MyLayout
android:layout_width="100dp"
android:layout_height="20dp"
android:text="SomeText" />
我想读取文本属性并将其应用到我的 TextView(目前它正在应用到 RelativeLayout)而不是创建我自己的属性并读取它。
我的自定义布局是这样的:
public class MyLayout extends RelativeLayout {
private TextView textView;
public void MyLayout(final Context context, final AttributeSet attrs) {
/**Read android attributes and apply it to TextView **/
??
}
我目前的解决方案是创建自定义属性并读取它们,但我觉得这不是一个好的解决方案,因为我将复制声明到 TextView 的每个属性。
有关我当前解决方案的更多信息。
我有一个名为 myText 的自定义属性,我用它来将 XML 中声明的文本应用到我的 TextView。
在我的布局中 XML :
myNameSpace:myText="SomeText"
并在我的 Java class 中阅读:
String text= a.getString(R.styleable.MyStyleable_myText);
textView.setText(text);
我希望摆脱我的自定义属性并阅读 "android:" 个属性。
首先,我不确定设置 android:text
是否可以用于视图扩展 RelativeLayout
。如果可能的话,像 TextView
实现中那样做:
final Resources.Theme theme = context.getTheme();
a = theme.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
text = a.getText(attr);
所以基本上这与您获取自定义属性的方式相同,但具有不同的样式。
如果它不起作用,我会考虑另一种方法。我为我的一个自定义视图做了这件事。由于您的自定义视图中有一个 TextView
,您可以在 XML 中创建它,然后在您的自定义视图中获取对该子项的引用。
<YourCustomView>
<TextView android:text="someText"/>
<YourCustomView/>