我一直在制作动态壁纸并且到目前为止终于成功了,但是现在我想让用户选择他们想要在drawable文件夹中拥有的背景。 我一直在尝试一些事情,但到目前为止没有运气通过这一切。 我有一个xml文件来读取他们可以选择的两个图像中的一个(我想如果我可以得到一个工作,他们都应该是相同的) 到目前为止,它是如何读取的 “DarkBack” “MediumBackb” “LightBack”
<string-array name="frontleft_value">
<item>"1"</item>
<item>"2"</item>
<item>"3"</item>
</string-array>bubble
所以他们选择三种背景中的任何一种
在活动中我有这个:
mPrefs = UnderwaterActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
mPrefs.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(mPrefs, null);
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
myOtherClass.myfrontleftimage = (Integer.parseInt(prefs.getString("front_sub_left_choice", "1")));
}
所以这应该得到1或2的整数,具体取决于在livewallpaper的设置中单击哪一个。 背景图像保存在不同的类中,但首先我必须比较他们点击的内容,所以我尝试了if / else语句,根本没有运气。
我尝试了字符串,但是没有用,所以我把它改成了int并运气好但不是全部。
if if就是这样。
private int chooseImage(){
int theImage = 0;
if(myfrontleftimage == 1){
theImage = R.drawable.image1;
}else if (myfrontleftimage == 2){
theImage = R.drawable.image2;
}else{
theImage = R.drawable.image3;
}
return theImage;
}
然后我将此方法放入背景图像中以便它可以读取它,我有一个设置java文件并实现共享首选项的引擎但我感觉它在我的if else语句中,我想要的是得到偏好的值,如果它们等于1,2,3则比较它们,如果任何一个等于其中一个然后它加载那个背景图像,理论上有意义但实际上没有明显的意义,任何帮助都会非常感激,如果我可以想出这一个然后我可以用它作为我在livewallpaper中的精灵。 提前致谢
编辑: 到目前为止我找到了这个问题,我在pref文件中输入了这个:
<string-array name="livewallpaper_back_names">
<item>Brown</item>
<item>Grey</item>
</string-array>
<string-array name="livewallpaper_back_value">
<item>0x7f020000</item>
<item>0x7f020001</item>
</string-array>
然后在sharedpreferences文件中,我尝试将0x7f020000(我想用它来选择图像)解析为int,就像这样
public void onSharedPreferenceChanged(SharedPreferences prefs,
String key)
{
sackNum = Integer.parseInt(prefs.getString("livewallpaper_back", "0x7f020000"));
}
但是我得到了这个错误,它无法完成
E/AndroidRuntime(340): java.lang.NumberFormatException: unable to parse '0x7f020000' as integer
所以这就是我现在被困住的地方。 我检查了日志,数组确实通过并且没有任何问题,所以这就是问题所在,如果有人可以帮我解析这个东西我会非常感激。 再次感谢您的任何帮助。
答案 0 :(得分:0)
您正在侦听共享偏好设置更改,但您似乎没有设置它们。
当用户进行选择时,使用和编辑设置charedPreferences。
然后在您的活动中,阅读onCreate()方法中的共享首选项。这样,它将在每次活动开始时检查savedPreference。
编辑首选项的代码如下:
public void onClick(DialogInterface dialog, int whichButton) {
SharedPreferences settings = getSharedPreferences("YOURPREFERENCENAME", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("name", "MyNameIsBob");
editor.putString("password", "MyPasswordIsEasy");
editor.commit();
}
在你的onCreate中,你会做这样的事情:
// Get any existing username and password saved
// Restore preferences
SharedPreferences settings = getSharedPreferences("YOURPREFERENCENAME", 0);
user_name = settings.getString("name", "defaultNameValue");
password = settings.getString("password", "defaultPasswordValue");
答案 1 :(得分:0)
好的,我在这里找到的测试模式示例的帮助下想出了这个:http://www.codeproject.com/KB/android/AndroidLiveWallpaper.aspx
首先,我向array.xml添加第三个深度,如
<string-array name="livewallpaper_back_names">
<item>Brown</item>
<item>Grey</item>
</string-array>
<string-array name="livewallpaper_back_value">
<item>brown</item>
<item>grey</item>
</string-array>
<integer-array name="brownback">
<item>0x7f020000</item>
</integer-array>
<integer-array name="greyback">
<item>0x7f020001</item>
</integer-array>
所以现在它将读取棕色或灰色然后我添加getResources()。getIdentifier以获取用户在livewallpaper的设置菜单中选择的数组,如下所示:
public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
{
String blah;
sackNum = prefs.getString("livewallpaper_back", "brown");
int pid = getResources().getIdentifier(sackNum + "back", "array", getPackageName());
int backImageArray[] = getResources().getIntArray(pid);
int back = backImageArray[0];
int theBackImage = back;
blah = getString(back);
Log.d(TAG, blah);
}
int pid通过添加返回(在xml中)收集棕色或灰色的数组并获取我随后放入backImageArray的数组,只选择第一个,因为那是唯一的,接下来我将数组更改为一个整数(int back = backImageArray [0];)所以可以读取它来获取用户选择的图像,这个图像可能是theBackImage,或者你可以将它直接放入Bitmap中
private Bitmap _backgroundImage = BitmapFactory.decodeResource(getResources(),theBackImage);
并预先获取图像。如果有人有更好的方法,请添加到此,但到目前为止这是有效的,请注意你必须在代码中更新,以便它读取并立即更改它但这是我想出的答案让用户至少选择图像。 希望它可以帮助其他人。 萨姆