LaughingMan
LaughingMan

Reputation: 660

The attribute is not declared (Android) on basic xml attributes

I'm new to this Android development, and I find the layout of it really confusing. I'm trying to have a background image on a view, and I've tried using this example Add a background image to shape in xml Android, but it looks very bad (bitmaps you know)

So I thought vectors could be fun. Only problem is that I cannot get even the official examples to work. I've tried setting this as a background

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="256dp"
    android:width="256dp"
    android:viewportWidth="32"
    android:viewportHeight="32">
<path android:fillColor="#8fff" android:pathData="M20.5,9.5
                  c-1.955,0,-3.83,1.268,-4.5,3
                  c-0.67,-1.732,-2.547,-3,-4.5,-3
                  C8.957,9.5,7,11.432,7,14
                  c0,3.53,3.793,6.257,9,11.5
                  c5.207,-5.242,9,-7.97,9,-11.5
                  C25,11.432,23.043,9.5,20.5,9.5z" />

It renders in the design view and all, but the attributes viewportWidth, viewportHeight, fillColor and pathData all show the same warning:

The 'http://schemas.android.com/apk/res/android:viewportWidth' is not declared

If I check the file, sure enough, it's not there. Does that mean I have to explicitly declare all those types? It seems a bit odd for vanilla examples.

Note that if I remove the 'android' in front of the warnings, it will remove warnings but still give me the same deployment error

Android.Views.InflateException: Binary XML file line #1: Error inflating class <unknown>

Upvotes: 26

Views: 28136

Answers (3)

Usman
Usman

Reputation: 2577

Problem

Intellisense could not pick the attributes we type although those attributes are existing in android SDK and shows this Attribute is not declared.

Solution

I got this problem yesterday in Visual Studio 2015 and started searching about this, ultimately I found that these two files are missing in XML schema folder in Visual Studio, so download these files links given below,

  1. https://github.com/atsushieno/monodroid-schema-gen/blob/master/android-layout-xml.xsd
  2. https://github.com/atsushieno/monodroid-schema-gen/blob/master/schemas.android.com.apk.res.android.xsd

Just download and move files manually to C:\Program Files (x86)\Microsoft Visual Studio 14.0\Xml\Schemas or simply just add these schemas within Visual Studio. This error will be gone, I resolved this issue with this procedure.

Upvotes: 43

AlexMelw
AlexMelw

Reputation: 2634

As I know, those attributes (that you pointed out above) aren't defined in jdk_1.7.

Use jdk_1.8 instead.

You can configure the path to the JDK in the following way:

Microsoft Visual Studio 2015 -> Tools -> Options -> Xamarin -> Android Settings -> JDK Location [Change]

Remark

If you are using Microsoft Visual Studio 2015 Update 3 or one of the earlier versions, I assure you that the warning won't disappear... this is already the Intellisense's issue (not the JDK's). It has to be fixed in the future release.

Screenshot

Upvotes: 3

SushiHangover
SushiHangover

Reputation: 74174

Create a template-based Xamarin.Android app.

Taking the vector.xml example from the Google/Android VectorDrawable docs and creating that as a .xml file under the Resources/drawable directory in the project:

<?xml version="1.0" encoding="UTF-8" ?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:height="64dp"
     android:width="64dp"
     android:viewportHeight="600"
     android:viewportWidth="600" >
     <group
         android:name="rotationGroup"
         android:pivotX="300.0"
         android:pivotY="300.0"
         android:rotation="45.0" >
         <path
             android:name="v"
             android:fillColor="#000000"
             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
     </group>
 </vector>

Update your Resouce/layout/Main.axml to include the vector on the background of the LinearLayout and the Button:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:background="@drawable/vector"
        >
    <Button
        android:id="@+id/myButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:background="@drawable/vector"
        />
</LinearLayout>

Results in:

enter image description here

Not a pretty example from Google, but it works.

Cleaning up your vector and setting the color to red

<?xml version="1.0" encoding="UTF-8" ?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:height="256dp"
     android:width="256dp"
     android:viewportHeight="60"
     android:viewportWidth="60" >
     <group
         android:name="rotationGroup"
         android:pivotX="0.0"
         android:pivotY="0.0"
         android:rotation="0.0" >
        <path
            android:name="so"
            android:fillColor="#F44336"
            android:pathData="M20.5,9.5
              c-1.955,0,-3.83,1.268,-4.5,3
              c-0.67,-1.732,-2.547,-3,-4.5,-3
              C8.957,9.5,7,11.432,7,14
              c0,3.53,3.793,6.257,9,11.5
              c5.207,-5.242,9,-7.97,9,-11.5
              C25,11.432,23.043,9.5,20.5,9.5z" />
     </group>
 </vector>

Results in:

enter image description here

Upvotes: 1

Related Questions