在Android中,可以在运行时更改自定义属性的值吗?

时间:2014-10-28 19:22:03

标签: runtime android-custom-attributes

我知道可以在xml上设置自定义属性及其值,但是, 可以在运行时稍后更改该值吗?

我有这个xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:example="http://schemas.android.com/apk/res/ValidatedButton.ValidatedButton"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <validatedbutton.ValidatedButton
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/icon_selector"
        example:state_valid="false"
        android:text="@string/hello" />
</LinearLayout>

我想在运行时更改示例:state_valid为true或false。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是我最近也试图弄清楚这个问题。

碰巧的是, Android MNC sdk的发布为我们提供了很多利用数据绑定的整洁能力。官方文档和指南可以在 here 找到,并且提供了一个非常好的教程 here 即可。

我实际上并没有对此进行过多次探索,但我相信现在可以通过使用这种新方法来实现原始问题。 Lemme知道这有用吗!

答案 1 :(得分:0)

不,你不能。

但是下面你可以找到丑陋的解决方法:

我认为你应该区分两种构建视图的方式:

  1. 从xml
  2. 充气 *静态布局
  3. 在Java
  4. 中在运行时上构建它

    在自定义视图的构造函数中,您可以获取在布局中定义的静态属性值,并将它们保存在自定义视图类字段中。然后,存储在字段中的值用于构建视图。视图是在某些上下文中构建的(例如,在活动的上下文中),因此从理论上讲,您可以将上下文强制转换为自定义活动,并在需要更改属性值时获取信息。或不,但您将只更改Java变量,而不是xml值。

    在我看来,如果你的视图是如此动态,它会经常改变,你应该考虑在XML中放置简单的容器(例如FrameLayout)。然后构建视图并在运行时将其添加到容器中。