我已将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。
答案 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 并且成功了。