Android自定义视图:无法添加自己的样式

时间:2015-02-16 07:44:45

标签: android android-view android-styles

我发现了一个改进,可能有助于不在我的Android应用程序中将视图值硬编码到java类中。我想知道如何才能让它发挥作用。我想在我的适配器中使用这种视图(这意味着我不能在我的布局根目录中使用@style属性)。我做错了什么?

代码:

styles.xml:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="customViewStyleRef">@style/CustomViewStyle</item>
    </style>

    <attr name="customViewStyleRef" format="reference"/>

    <style name="CustomViewStyle" parent="@android:style/Widget.TextView">
        <item name="android:layout_margin">10dp</item>
    </style>
</resources>

查看课程:

public class CustomView extends View {
    public CustomView(Context context) {
        super(context, null);
    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs, R.attr.customViewStyleRef);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, R.attr.customViewStyleRef);
    }

    public void init(@NonNull ViewGroup parentView) {
        inflate(getContext(), R.layout.custom_view, parentView);
    }
}

查看布局:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#f00"
            android:textColor="#fff"
            android:textSize="50sp"
            android:text="test text"/>
</merge>

问题:TextView容器没有我在styles.xml中指定的任何填充(参见图片)。

Image of my project files and emulator

2 个答案:

答案 0 :(得分:0)

您应该初始化TextView,然后使用TextView的样式,或者您可以通过将样式名称放在TextView中来解决此问题,并使用TextView的id来帮助它使用它。

<TextView
        android:id="@+id/custom_tv"
        style="@style/CustomViewStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#f00"
        android:textColor="#fff"
        android:textSize="50sp"
        android:text="test text"/>

答案 1 :(得分:0)

我想我已经弄明白了。我构建的文件以某种方式缓存,我无法使其工作。我采取了错误的测试参数。我的方法有效