所以我的一个Android应用程序出现了一些奇怪的行为。我有两个应用程序,都有相同的自定义背景图像,一个工作正常。但是,另一方不想合作。
我通过以下方式在AndroidManifest.xml中添加了一个自定义主题:
<application
...
android:theme="@style/MyTheme" >
我将styles.xml(整个文件)更改为以下内容:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyTheme" parent="android:Theme.Holo">
<item name="android:background">@drawable/dummy_background_image</item>
</style>
</resources>
同样,这适用于app#1。但app#2 ......
当我这样称呼时:
setListAdapter(new ArrayAdapter<Game>(getActivity(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1,
gameCategories.getCategories()));
它抛出:
01-22 21:30:21.439: E/AndroidRuntime(28044): FATAL EXCEPTION: main
01-22 21:30:21.439: E/AndroidRuntime(28044): java.lang.NumberFormatException: Invalid int: "res/drawable/dummy_background_image.png"
01-22 21:30:21.439: E/AndroidRuntime(28044): at java.lang.Integer.invalidInt(Integer.java:138)
01-22 21:30:21.439: E/AndroidRuntime(28044): at java.lang.Integer.parse(Integer.java:375)
01-22 21:30:21.439: E/AndroidRuntime(28044): at java.lang.Integer.parseInt(Integer.java:366)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:122)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.content.res.TypedArray.getInt(TypedArray.java:255)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.view.animation.Animation.<init>(Animation.java:251)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.view.animation.AlphaAnimation.<init>(AlphaAnimation.java:40)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:117)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:92)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:73)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.support.v4.app.ListFragment.setListShown(ListFragment.java:290)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.support.v4.app.ListFragment.setListAdapter(ListFragment.java:186)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.example.legacy.GameListFragment.updateListAdapter(GameListFragment.java:107)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.example.legacy.GameListActivity.updateListAdapter(GameListActivity.java:158)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.example.legacy.databaseAccess.DatabaseAccessTask.onPostExecute(DatabaseAccessTask.java:57)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.example.legacy.databaseAccess.DatabaseAccessTask.onPostExecute(DatabaseAccessTask.java:1)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.os.Looper.loop(Looper.java:137)
01-22 21:30:21.439: E/AndroidRuntime(28044): at android.app.ActivityThread.main(ActivityThread.java:5455)
01-22 21:30:21.439: E/AndroidRuntime(28044): at java.lang.reflect.Method.invokeNative(Native Method)
01-22 21:30:21.439: E/AndroidRuntime(28044): at java.lang.reflect.Method.invoke(Method.java:525)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
01-22 21:30:21.439: E/AndroidRuntime(28044): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
01-22 21:30:21.439: E/AndroidRuntime(28044): at dalvik.system.NativeStart.main(Native Method)
当我进入调试模式时,应用程序会短暂显示应用程序(在它到达列表适配器之前),因此它至少可以找到该文件。
显然,我知道它是一个字符串,并将其转换为int将失败。但是为什么将它转换为int并且没有得到相应的数字呢?为什么它适用于app#1和app#2?
提前致谢。
答案 0 :(得分:1)
问题在于
<item name="android:background">@drawable/dummy_background_image</item>
相反,请使用
<item name="android:windowBackground">@drawable/dummy_background_image</item>
它会起作用
答案 1 :(得分:0)
如上所述,尝试使用自定义主题设置背景图像时遇到了同样的错误。在我的情况下,我没有调用setListAdaptor,但是当我将焦点从一个输入字段切换到另一个输入字段时,抛出了相同的异常。此外,它只发生在Android 4.3上,而不是4.4。我不确定为什么它不起作用,因为它似乎是推荐的方法之一,但我的解决方法是以编程方式设置背景。当我从styles.xml文件中删除“item”标记时,我停止了错误,并在我的Activity中添加了这个(我碰巧需要为webview设置背景)。
webView.setBackgroundResource(R.drawable.background);
答案 2 :(得分:0)
而不是 android:background 使用 android:windowBackground ...这对我有用..