android - 在我的自定义 View 上读取 Android 属性

标签 android android-layout android-custom-view

我已经创建了一个自定义布局类(扩展 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 类中阅读它:

String text= a.getString(R.styleable.MyStyleable_myText);
textView.setText(text);

我希望摆脱我的自定义属性并读取“android:”属性。

最佳答案

首先,我不确定设置 android:text 是否可以用于 View 扩展 RelativeLayout。如果可能的话,像在 TextView 实现中那样做:

final Resources.Theme theme = context.getTheme();
a = theme.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
text = a.getText(attr);

所以基本上这与您获取自定义属性的方式相同,但具有不同的样式。

如果它不起作用,我会考虑另一种方法。我为我的一个自定义 View 做了这件事。由于您的自定义 View 中有一个 TextView,您可以在 XML 中创建它,然后在您的自定义 View 中获取对该子项的引用。

<YourCustomView>
    <TextView android:text="someText"/>
<YourCustomView/>

关于android - 在我的自定义 View 上读取 Android 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163042/

相关文章:

android - 覆盖 xamarin android 应用程序上的后退按钮

c# - Web Api项目获取上传文件的字节数组

java - 如何用 ImageViews 替换 youtube iframe 标签或缩略图

android - 如何为自定义控件创建事件

android - SeekBar 从代码中设置线宽和颜色

javascript - jQuery 加载微调器未显示

android - 单击并按住耳机按钮无任何 Action

android - View (不是 fragment )的 ViewPager 作为 fragment 中 gridview(Etsy 的 StaggeredGridView)的标题

android - recyclerView 的 setOnClickListener 不起作用

Android - Canvas 和缓冲图像 - 自定义 View 表现疯狂