Xamarin - 在Imageview和Edittext中使用VectorDrawable

时间:2016-12-28 10:00:10

标签: android xamarin xamarin.android android-vectordrawable

我在我的imageView和Edittext

中应用vectordrawable时遇到问题

这是我尝试修复问题

首先 我正在使用Xamarin.Android.Support.Vector.Drawable版本23.4.0

第二次 我在应用程序的onCreate中添加AppCompatDelegate.CompatVectorFromResourcesEnabled = true;

public class MyApplication : Application
    {


        public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
        {
            Log.Debug("App", "I am in oncreate application");
        }
        public override void OnCreate()
        {
            base.OnCreate();
            AppCompatDelegate.CompatVectorFromResourcesEnabled = true;

        }

}

*第三次* 使用AppCompatActivity确保我的活动使用AppCompatImageView而不是普通ImageView并尝试手动设置drawable但它返回null(I不知道为什么会发生这种情况)

 [Activity( Label = "Activity1", Theme = "@style/AppTheme")]
    public class Activity1 : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.test);

            ImageView testImage = FindViewById<ImageView>(Resource.Id.imageViewTest);

            Drawable drawable = VectorDrawableCompat.Create(Resources, Resource.Drawable.ic_arrow_back_white_24dp, null);
            testImage.SetImageDrawable(drawable);

        }
    }
我的项目中的

第四 .csproj我添加了构建工具版本23.0.3 <AndroidSdkBuildToolsVersion>23.0.3</AndroidSdkBuildToolsVersion>

这是我的完整文件内容

?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AndroidSdkBuildToolsVersion>23.0.3</AndroidSdkBuildToolsVersion>
    <AndroidDesignerPreferredDevice>Nexus 4</AndroidDesignerPreferredDevice>
    <SelectedDevice>Nexus_5_API_21_x86</SelectedDevice>
    <AndroidDesignerPreferredTheme>Theme.DeviceDefault</AndroidDesignerPreferredTheme>
  </PropertyGroup>
</Project>

第五我引用了我的矢量图像app:srcCompat

但它仍然无法正常工作可以帮助我解决这个问题

2 个答案:

答案 0 :(得分:1)

我解决了我的问题的前半部分简单更新到

Xamarin.Android.Support.Vector.Drawable Version 23.4.0.1

确保以这种方式引用矢量图像app:srcCompat

与EditText Image相关我认为你不能从xml设置它你需要通过代码使用它这里是方法

SetCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom);

在我的情况下,我使用了leftdrawable,所以我的方法看起来像

SetCompoundDrawablesWithIntrinsicBounds(Resource.Drawable.MyDrawable, 0, 0, 0);

希望这有助于任何人面对同样的问题

答案 1 :(得分:0)

更新:忘记旧解决方案。只需更新到最新的Verison of Xamarin(Xamarin.Android 7.2.0.7)和最新版本的支持库(25.3.1)。

旧解决方案:

降级到Xamarin 4.2.0.680,仅使用支持库版本23.3.0(Android 4.4.4上的最新稳定24.2.1崩溃,但适用于Android 6)

同时确保:

将此静态构造函数放入Activity:

static Activity1()
{
   AppCompatDelegate.CompatVectorFromResourcesEnabled = true;
}

或者将AppCompatDelegate.CompatVectorFromResourcesEnabled = true;添加到您的Application班级OnCreate方法中。

你的项目中的

<AndroidSdkBuildToolsVersion>不再是必须的了。

使用app:srcCompat,就像您已经做的那样。

Nuget

查看每个支持库的依赖关系

我有:

  • Xamarin.Android.Support.Animated.Vector.Drawable.dll 23.3.0
  • Xamarin.Android.Support.Design.dll 23.3.0
  • Xamarin.Android.Support.v14.Preference.dll 23.3.0
  • Xamarin.Android.Support.v4.dll 23.3.0
  • Xamarin.Android.Support.v7.AppCompat.dll 23.3.0
  • Xamarin.Android.Support.v7.Preference.dll 23.3.0
  • Xamarin.Android.Support.v7.RecyclerView.dll 23.3.0
  • Xamarin.Android.Support.Vector.Drawable.dll 23.3.0

同时请确保您引用Java.Interop.dll

尝试另一个矢量drawable,例如来自Material Design Icons(点击图标,选择图标包 .XML Vector Drawable )。