我的 Android 应用程序使用英语运行,我也必须为用户提供阿拉伯语版本。我做了以下,
- 添加了一个 layout-ar 文件夹并将我的布局文件放在那里。
- 添加了一个 drawable-ar 文件夹并将我的图像放在那里。
- 添加了 values-ar 文件夹并在 strings.xml 中翻译了我的字符串资源
- 将我的模拟器中的语言设置更改为阿拉伯语进行测试
尽管我的应用程序的英文版本运行良好,但我的阿拉伯语版本现在崩溃并出现以下日志跟踪
06-20 10:08:13.153: E/AndroidRuntime(623): FATAL EXCEPTION: main
06-20 10:08:13.153: E/AndroidRuntime(623): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.digitalhealthagency.elaj.gui/org.digitalhealthagency.elaj.gui.SplashScreen}: android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageView
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.os.Looper.loop(Looper.java:137)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-20 10:08:13.153: E/AndroidRuntime(623): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 10:08:13.153: E/AndroidRuntime(623): at java.lang.reflect.Method.invoke(Method.java:511)
06-20 10:08:13.153: E/AndroidRuntime(623): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-20 10:08:13.153: E/AndroidRuntime(623): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-20 10:08:13.153: E/AndroidRuntime(623): at dalvik.system.NativeStart.main(Native Method)
06-20 10:08:13.153: E/AndroidRuntime(623): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageView
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.createView(LayoutInflater.java:606)
06-20 10:08:13.153: E/AndroidRuntime(623): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
06-20 10:08:13.153: E/AndroidRuntime(623): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.Activity.setContentView(Activity.java:1835)
06-20 10:08:13.153: E/AndroidRuntime(623): at org.digitalhealthagency.elaj.gui.SplashScreen.onCreate(SplashScreen.java:16)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.Activity.performCreate(Activity.java:4465)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-20 10:08:13.153: E/AndroidRuntime(623): ... 11 more
06-20 10:08:13.153: E/AndroidRuntime(623): Caused by: java.lang.reflect.InvocationTargetException
06-20 10:08:13.153: E/AndroidRuntime(623): at java.lang.reflect.Constructor.constructNative(Native Method)
06-20 10:08:13.153: E/AndroidRuntime(623): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.view.LayoutInflater.createView(LayoutInflater.java:586)
06-20 10:08:13.153: E/AndroidRuntime(623): ... 24 more
06-20 10:08:13.153: E/AndroidRuntime(623): Caused by: java.lang.OutOfMemoryError
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.Bitmap.nativeCreate(Native Method)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.content.res.Resources.loadDrawable(Resources.java:1935)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.widget.ImageView.<init>(ImageView.java:119)
06-20 10:08:13.153: E/AndroidRuntime(623): at android.widget.ImageView.<init>(ImageView.java:109)
06-20 10:08:13.153: E/AndroidRuntime(623): ... 27 more
错误日志引用了我的 SplashScreen java 文件中的第 16 行,该文件设置了内容视图setContentView(R.layout.splash_screen);
而我的 splash_screen.xml 文件如下
<?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" >
<ImageView
android:id="@+id/splash_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:src="@drawable/splash_screen" />
</LinearLayout>
这个问题和我的 Android 很相似:How to track down the origin of a InflateException? 但修复风格并不能解决问题。
先感谢您!
编辑
在按照 Aleks G 的建议减小图像的大小后,图像加载正常,但现在我在不同的地方遇到了类似的错误。
06-20 14:27:22.157: E/AndroidRuntime(623): FATAL EXCEPTION: main
06-20 14:27:22.157: E/AndroidRuntime(623): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.digitalhealthagency.elaj.gui/org.digitalhealthagency.elaj.gui.AppointmentReservationActivity}: android.view.InflateException: Binary XML file line #99: Error inflating class <unknown>
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.os.Looper.loop(Looper.java:137)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-20 14:27:22.157: E/AndroidRuntime(623): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 14:27:22.157: E/AndroidRuntime(623): at java.lang.reflect.Method.invoke(Method.java:511)
06-20 14:27:22.157: E/AndroidRuntime(623): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-20 14:27:22.157: E/AndroidRuntime(623): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-20 14:27:22.157: E/AndroidRuntime(623): at dalvik.system.NativeStart.main(Native Method)
06-20 14:27:22.157: E/AndroidRuntime(623): Caused by: android.view.InflateException: Binary XML file line #99: Error inflating class <unknown>
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.createView(LayoutInflater.java:606)
06-20 14:27:22.157: E/AndroidRuntime(623): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
06-20 14:27:22.157: E/AndroidRuntime(623): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.Activity.setContentView(Activity.java:1835)
06-20 14:27:22.157: E/AndroidRuntime(623): at org.digitalhealthagency.elaj.gui.AppointmentReservationActivity.onCreate(AppointmentReservationActivity.java:88)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.Activity.performCreate(Activity.java:4465)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
06-20 14:27:22.157: E/AndroidRuntime(623): ... 11 more
06-20 14:27:22.157: E/AndroidRuntime(623): Caused by: java.lang.reflect.InvocationTargetException
06-20 14:27:22.157: E/AndroidRuntime(623): at java.lang.reflect.Constructor.constructNative(Native Method)
06-20 14:27:22.157: E/AndroidRuntime(623): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.LayoutInflater.createView(LayoutInflater.java:586)
06-20 14:27:22.157: E/AndroidRuntime(623): ... 24 more
06-20 14:27:22.157: E/AndroidRuntime(623): Caused by: java.lang.OutOfMemoryError
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.Bitmap.nativeCreate(Native Method)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.content.res.Resources.loadDrawable(Resources.java:1935)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.content.res.Resources.getDrawable(Resources.java:664)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:867)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:804)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.content.res.Resources.loadDrawable(Resources.java:1920)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.view.View.<init>(View.java:2785)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.widget.TextView.<init>(TextView.java:449)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.widget.Button.<init>(Button.java:108)
06-20 14:27:22.157: E/AndroidRuntime(623): at android.widget.Button.<init>(Button.java:104)
06-20 14:27:22.157: E/AndroidRuntime(623): ... 27 more
日志跟踪引用的第 88 行是
setContentView(R.layout.appointment_reservation);
在约会_reservation.xml 中的第 99 行是
<Button android:id="@+id/reserve_button"
android:text="@string/reserve_button"
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:paddingRight="15dp"
android:layout_gravity="left"
style="@style/buttonStyle"
android:background="@drawable/button_selector" />
我给按钮一个 button_selector xml 文件,该文件放在我的可绘制文件夹中。选择器在两个图像之间切换(总大小 6kb)。
先感谢您!