Android GetResourceId并不总是获取ID

时间:2014-04-02 16:50:27

标签: android android-animation android-resources

为什么我的自定义控件从一个视图解析动画资源,而不是另一个视图?

我有一个继承自TextView的自定义控件。在我的Initialize方法中,我得到了以下内容。

    private void Initialize(IAttributeSet attrs)
    {
        var a = _context.Theme.ObtainStyledAttributes(attrs, Resource.Styleable.FontIconTextView, 0, 0);

        // work with animations
        _animationResource = a.GetResourceId(Resource.Styleable.FontIconTextView_Animation, 0);
        _animation = AnimationUtils.LoadAnimation(_context, _animationResource);
        Animate = a.GetBoolean(Resource.Styleable.FontIconTextView_Animate, false);

        Initialize();
    }

我有一个定义所有local属性的资源。

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <declare-styleable name="FontIconTextView">
    <attr name="Animate" format="boolean" />
    <attr name="Animation" format="integer" />
  </declare-styleable>
</resources>

然后在我的启动画面上,我有以下控件正在工作按预期

  <FontIconTextView
      android:id="@+id/Splashscreen_QuickSync_Icon"
      android:text="@string/icon_refresh"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="12dp"
      android:layout_marginRight="12dp"
      android:padding="10dp"
      android:textSize="20dp"
      android:clickable="false"
      android:textColor="#00bbe6"
      android:layout_gravity="right"
      local:Animate="true"
      local:Animation="@anim/sync_rotate" />

启动屏幕加载,_animationResource = 2130968576

但是,我的RootView上有类似的代码

  <FontIconTextView
      android:id="@+id/RootView_QuickSync_Icon"
        android:text="@string/icon_refresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="12dp"
        android:layout_marginRight="12dp"
        android:padding="10dp"
        android:layout_centerVertical="true"
        android:textSize="20dp"
        android:clickable="false"
        android:textColor="#ffffff"
        local:MvxBind="Command QuickSyncCommand; Animate Animate"
        local:Animation="@anim/sync_rotate"/>

当我运行它时,_animationResource = 0我得到以下异常

  

android.view.InflateException:二进制XML文件行#1:错误输出类FontIconTextView
  Android.Views.InflateException:正在加载...
  程序'Mono'已退出,代码为0(0x0)。

现在我不确定两者之间有什么区别,但是我无法从SplashScreen而不是RootView访问@anim/sync_rotate

0 个答案:

没有答案