gpt4 book ai didi

android - 在 android 中更改 AttributeSet 值

转载 作者:行者123 更新时间:2023-11-29 00:07:18 24 4
gpt4 key购买 nike

我有自定义 View ,它将属性集(xml 值)作为构造函数值

public CustomView(Context context)  // No Attributes in this one.
{
super(context);
this(context, null, 0);
}

public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this(context, attrs, 0)
}

public CustomView(Context context, AttributeSet attrs, int default_style) {
super(context, attrs, default_style);
readAttrs(context, attrs, defStyle);
init();
}

在 Fragment 类中,我将 View 设置为

CustomView customView = (CustomView) view.findViewById(R.id.customView); 

其中自定义 View 包含各种值,如高度、宽度、填充等。

我想根据要求的条件修改这些值并将其设置回自定义 View 。我将设置宽度高度代码放在 onDraw 方法中并调用 invalidte View 。但是如果我在 CustomView 类中调用 invalidate 方法,上述方法将每次设置。如何克服这个问题,以便我可以仅在构造函数中传递修改后的属性集值。?

编辑:我需要修改在属性构造函数期间设置的 View 值(使用新值初始化),以便我将获得具有新值的刷新 View 。覆盖@OnDraw 或'Invalidate' 对我来说不是一个好函数,在 invalidate 中我已经编写了将在每个秒间隔执行的方法。

最佳答案

我看到您的 CustomView 可以有多个属性,您希望根据某些条件修改其中一些属性并将其传递到构造函数中。

设计自定义 View 时的一些最佳实践:

  1. 如果您有自定义属性,请确保通过 setter 和 getter 公开它们。在您的 setter 方法中,调用 invalidate();
  2. 不要尝试修改 onDraw()onMeasure() 方法中的任何属性。
  3. 尽量避免为自定义 View 编写自定义构造函数。

因此,解决问题的理想方法是实例化 CustomView,然后在外部(在 Activity 或 Fragment 中)修改属性,或者在 CustomView.java 中有一个方法,然后外部调用它。这样做仍然会为您提供您正在寻找的相同结果。

关于android - 在 android 中更改 AttributeSet 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com