Svg在设备中不可见但在android xml

时间:2017-04-24 17:53:02

标签: android xml android-layout svg android-imageview

enter image description here

我已将SVG用于这些图标,图标在xml中可见但在设备中不可见。 以下是我的代码:

                ` <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true"
                    android:gravity="center"
                    android:orientation="horizontal"
                    android:weightSum="10"
                   >

                    <ImageView
                        android:layout_width="0dp"
                        android:layout_height="25dp"
                        android:layout_weight="1.5"
                        app:srcCompat="@drawable/email_id_icon"
                        />

                    <EditText
                        android:layout_width="0dp"
                        android:id="@+id/et_email"
                        android:layout_height="wrap_content"
                        android:layout_weight="8"
                        android:textColor="#fff"
                        android:inputType="textEmailAddress"
                        android:background="@android:color/transparent"
                        android:hint="Email Id"
                        android:textColorHint="#fff"
                        android:imeOptions="actionNext"
                        />

                </LinearLayout>`

我在SO上遇到过类似的问题,大多数人建议使用           android: src代替app:srcCompat,但由于SVG,我必须使用srcCompat。所以我该怎么做?

修改 我在另一个活动的布局中做了同样的事情。 这是工作代码:

  <LinearLayout
        android:id="@+id/login_form_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView2"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:padding="20dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:gravity="center"
            android:orientation="horizontal"
            android:weightSum="10">

            <ImageView
                android:id="@+id/username_iv"
                android:layout_width="0dp"
                android:layout_height="25dp"


                android:layout_weight="2"
                app:srcCompat="@drawable/email_id_icon" />

            <EditText
                android:layout_width="0dp"
                android:id="@+id/username_et"
                android:layout_height="wrap_content"
                android:layout_weight="8"
                android:textColor="#fff"
                android:inputType="textEmailAddress"
                android:background="@android:color/transparent"
                android:hint="Email Id"
                android:textColorHint="#fff"
                android:imeOptions="actionNext"
                />

        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginBottom="10dp"
            android:background="#fff" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:gravity="center"
            android:orientation="horizontal"
            android:weightSum="10">

            <ImageView
                android:id="@+id/password_iv"
                android:layout_width="0dp"
                android:layout_height="25dp"
                android:layout_weight="2"
                app:srcCompat="@drawable/password_icon" />

            <EditText
                android:id="@+id/password_et"
                android:layout_height="wrap_content"
                android:layout_weight="8"
                android:layout_width="0dp"
                android:background="@android:color/transparent"
                android:textColor="#fff"
                android:hint="Password"
                android:inputType="textPassword"
                android:fontFamily="roboto"
                android:textColorHint="#fff"
                 />

        </LinearLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginBottom="20dp"
            android:background="#fff" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btn_login"
            android:layout_marginBottom="20dp"
            android:background="@drawable/login_button_style"
            android:text="Login"
            android:textSize="@dimen/headingText"
            android:textAllCaps="false"
            android:textColor="#fff" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_forgetpassword"
            android:layout_marginBottom="10dp"
            android:text="Forget your password ?"
            android:textColor="#fff"
            android:textSize="@dimen/headingText" />


    </LinearLayout>

我不想拥有4种分辨率的图标,所以我制作了一个.png图像并使用Android Studio的Vector资源转换为.svg。

3 个答案:

答案 0 :(得分:1)

您可以使用VectorDrawable

以下tool将您的svg转换为VectorDrawable

在棒棒糖前设备上,svg支持不是很全面。

build.gradle

中添加此内容
 android {  
    defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
    }  
}  

答案 1 :(得分:1)

确保您使用的是AppCompatActivity,而不是Activity。如果您使用的是Activity,请写下您的活动/片段:

imageView.setImageResource(R.drawable.ic_svg_image);

还添加build.gradle

android {  
    defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
    }  
}

对于Android的4.x版本,您还可以添加对TextView的内部可绘制对象的支持。对于ImageView来说也是这样。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // This flag should be set to true to enable VectorDrawable support for API < 21.
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
}

然后在AndroidManifest中添加此文件:

<application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ...
</application>

有时它会在某些旧设备上崩溃。然后将您的可绘制对象包裹在里面:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_svg_image/>
</selector>

并设置它而不是SVG:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/drawable"
    />

答案 2 :(得分:0)

我尝试了 androidx.appcompat.widget.AppCompatImageView 而不是 ImageView 并且成功了。