だから私は2番目のアプリを作っています.複数のスキン/アイコンセットを持ち、メインメニューボタンをランダム化できるメニューを構築することに決めました.ユーザーが別のスキームを選択すると、色が動的に変化するようになりました。これは正常に機能し、ユーザーが毎回メニューボタンの色をランダムにするかどうかを尋ねるボックスに来ると、次のようになります。
ランダム化をクリックすると動的に変化しますが、シーケンシャルにチェックを入れるとまったく変化せず、わかりません。
私は 3 つの主要なファイルを持っています: ConversePrefs.java は、共有設定を取得するためのショートカット関数のセットにすぎないため、100% 正しいと確信しているため、投稿しません。
MainMenu.java - メイン アクティビティ/メイン メニュー:
package com.arl.conversion;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainMenu extends Activity {
private static final OnClickListener PreSetupsColor = null;
final Context context = this;
ColorCollections cc = new ColorCollections(context);
List<String> colorList = null;
int currentIndex = 0;
public void LoadColorPalette(){
ConversePrefs cp = new ConversePrefs(this);
colorList = cc.GetColorList(cp.GetIntSetting("UsersColor", 0),cp.GetBolSetting("UsersRandomizer", false));
}
public void SetBtnColour(int btn){
Button bttn = (Button)findViewById(btn);
bttn.setBackgroundColor(Color.parseColor(colorList.get(currentIndex)));
currentIndex++;
}
public void GenerateButtonsDefault(){
ConversePrefs cp = new ConversePrefs(this);
LoadColorPalette();
SetBtnColour(R.id.DistanceBtn);
SetBtnColour(R.id.VolumeBtn);
SetBtnColour(R.id.AreaBtn);
SetBtnColour(R.id.ClothingBtn);
SetBtnColour(R.id.ElectricBtn);
SetBtnColour(R.id.TempBtn);
SetBtnColour(R.id.TimeBtn);
SetBtnColour(R.id.MoneyBtn);
SetBtnColour(R.id.SpeedBtn);
SetBtnColour(R.id.MathBtn);
SetBtnColour(R.id.CurrencyBtn);
SetBtnColour(R.id.OptionsBtn);
}
public void RefreshMenu(){
currentIndex = 0;
GenerateButtonsDefault();
}
//SECOND
public void PreSetuposColor(final View v){
final ConversePrefs cp = new ConversePrefs(this);
String[] ColorSchemes = {"Windows 8", "Modern Urban"};
new AlertDialog.Builder(this).
setTitle("Color Scheme").
setSingleChoiceItems(ColorSchemes, cp.GetIntSetting("UsersColor", 0), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cp.SetIntSetting("UsersColor", which);
RefreshMenu();
}
}).
setPositiveButton("Continue", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
MainMenu.this.PreSetupRandoms(v);
}
}).setNeutralButton("Back", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
MainMenu.this.PreSetupsWelcome(v);
}
}).setNegativeButton("Quit", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
System.exit(0);
}
}).setCancelable(false).show();
}
// THIRD
public void PreSetupRandoms(final View v){
final ConversePrefs cp = new ConversePrefs(this);
String[] FalseAndTrue = {"Sequential", "Randomize"};
new AlertDialog.Builder(this).
setTitle("Randomize Colors?").
setSingleChoiceItems(FalseAndTrue, cp.GetBoolInt(cp.GetBolSetting("UsersRandomizer", false)), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cp.SetBooleanSetting("UsersRandomizer", cp.GetIntBool(which));
RefreshMenu();
}
}).setPositiveButton("Continue", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO
}
}).setNeutralButton("Back", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
MainMenu.this.PreSetuposColor(v);
}
}).setNegativeButton("Quit", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
System.exit(0);
}
}).setCancelable(false).show();
}
//FIRST
public void PreSetupsWelcome(final View v){
new AlertDialog.Builder(this).
setTitle("Welcome").
setMessage("It seems that this is the first time application was ran on this device, you will be now presented with app appearance setup of your own choice.").
setPositiveButton("Continue", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
MainMenu.this.PreSetuposColor(v);
}
}).
setNegativeButton("Quit", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
System.exit(0);
}
}).
setCancelable(false).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConversePrefs cp = new ConversePrefs(this);
//LoadColorPalette();
setContentView(cc.GetTheme(cp.GetIntSetting("ThemeName", 0)));
GenerateButtonsDefault();
PreSetupsWelcome(new View(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
}
ColorCollections.java - 色に関する情報と取得用のいくつかの関数を含むファイル。
package com.arl.conversion;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
public class ColorCollections{
Context context;
public ColorCollections(Context context){
this.context = context;
}
//Color Palettes.
public static String[] Win8 = new String[]{"#008299","#00A0B1","#2672EC","#2E8DEF","#8C0095","#A700AE","#5133AB","#643EBF","#AC193D","#BF1E4B","#D24726","#DC572E","#008A00","#00A600","#094AB2","#0A5BC4"};
public static String[] ModernUrban = new String[]{"#47B6BE","#73CC3E","#FF7149","#FF5063","#FF6999","#233977","#4B9364","#8A8F1D","#A63B52","#B23265","#883E57","#888788","#87A087"};
public List<String> GetColorList(int colorindex, boolean randomizer){
List<String> colorList = Arrays.asList(Win8);
switch(colorindex){
case 0:
colorList = Arrays.asList(Win8);
break;
case 1:
colorList = Arrays.asList(ModernUrban);
break;
}
if(randomizer == true){
Collections.shuffle(colorList);
Collections.shuffle(colorList);
Collections.shuffle(colorList);
Collections.shuffle(colorList);
}
return colorList;
}
public int GetTheme(int theme){
int themeID = 0;
switch(theme){
case 0:
themeID = R.layout.activity_main_menu_light;
break;
case 1:
themeID = R.layout.activity_main_menu_light_bg;
break;
case 2:
themeID = R.layout.activity_main_menu_dark;
break;
case 3:
themeID = R.layout.activity_main_menu_dark_bg;
break;
}
return themeID;
}
}
誰かが問題を特定できますか? 私は過去 2 時間これに行き詰まり、すべてを試してみましたが、最終的にははるかに効率的なコードになりました (あなたには悪いように見えるかもしれませんが、それはもっと悪いことでした、私を信じてください)。
また、4 セットのアイコンがあり、各セットに 12 個のアイコンがあり、各セットにはアイコンのプレフィックスがあり、実際にインポートされたドローアブル .png です。それらの XML リストを手動で入力するよりも良い方法はありますか?
ありがとうございました。