我发现了一个改进,可能有助于不在我的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中指定的任何填充(参见图片)。
答案 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)
我想我已经弄明白了。我构建的文件以某种方式缓存,我无法使其工作。我采取了错误的测试参数。我的方法有效