1

これは私の最初のアプリであり、初めての投稿ですので、ご容赦ください。

ユーザーがスキンの変更画面からアプリ全体の背景色を選択できるようにしようとしています。ただし、私が今持っているものでは、メインのアクティビティに戻るまで、アクティビティの色が変わるだけです。

スキンの変更画面のコードは次のとおりです。

package cs.pacificu.mypace;

import android.R.layout;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class Skin extends Activity
{

    @Override
    public void onCreate(Bundle savedInstanceState)
{
    final String[] SKINS = new String[] {"Light", "Dark"};

    super.onCreate(savedInstanceState);
    setContentView(R.layout.playlist);
    final ListView listView = (ListView) findViewById (R.id.playlists);

    listView.setAdapter(new ArrayAdapter<String>            (this,R.layout.single_list_item,SKINS));

    listView.setTextFilterEnabled(true);
    listView.setOnItemClickListener(new OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id)
        {
            // When clicked, show a toast with the TextView text
            Toast.makeText(getApplicationContext(),
            ((TextView) view).getText(), Toast.LENGTH_SHORT).show();

            //
            View layout = findViewById(R.layout.activity_main);
            String selectedFromList = (listView.getItemAtPosition(position).toString ());

            if (SKINS [0] == selectedFromList)
            {
                listView.setBackgroundColor(Color.CYAN);
                 //layout.setBackgroundColor(android.R.color.darker_gray);

            }
            else if (SKINS[1] == selectedFromList)
            {
                listView.setBackgroundColor(Color.BLACK);
                //layout.setBackgroundColor(android.R.color.black);
            }


                //

                finish();
            }
        });

    }
}

そして、これが主なアクティビティコードです

package cs.pacificu.mypace;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
/*import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuInflater;*/
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        startPlaylists(null);
    }


    @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);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected (MenuItem item)
    {
        switch (item.getItemId()) {
        case R.id.skin:
            changeSkin();
            return true;
        case R.id.action_settings:
            settingsList();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    public void startPlaylists (View view)
    {
        Intent intentPlaylists = new Intent();
        intentPlaylists.setClassName("cs.pacificu.mypace", "cs.pacificu.mypace.Playlist");
        intentPlaylists.setAction("@strings/action_playlists");
        startActivity(intentPlaylists);
    }

    public void changeSkin ()
    {
        Intent intentSkin = new Intent();
        intentSkin.setClassName("cs.pacificu.mypace", "cs.pacificu.mypace.Skin");
        intentSkin.setAction("@strings/action_skin");
        startActivity(intentSkin);
    }

    public void settingsList ()
    {
        Intent intentSettings = new Intent();
        intentSettings.setClassName("cs.pacificu.mypace", "cs.pacificu.mypace.Settings");
        intentSettings.setAction("@strings/action_settings");
        startActivity(intentSettings);
    }

}

ありがとうございました!

4

2 に答える 2

1

できることはSharedPreferences、ユーザーが選択したものに値を設定し、各アクティビティの開始時にその値をレイアウトの背景色に設定することです。これが、これを解決するための最良の方法です。

したがって、すべてのアクティビティで、それらを の値に設定し、設定されてSharedPreferencesいない場合はデフォルトのものを使用します。可能な値の格納に関しては、XML ファイルを使用するか、値を 1 つのグローバル クラスにハード コードすることができますが、前者の方が望ましいです。

ここを見て、彼らが何をしたか見てみましょう (Android-page-about-data-storage)

編集:背景色だけをそのようにシンプルに保つ場合は、次のようにすることができます:

|- これらをある程度グローバルに (おそらくクラス内に) 保持し、必要に応じてアクセスします。

// Make sure to maintain the connection
String[] SKINS = {"Light", "Dark"};
int[] COLOURS = {Color.CYAN, Color.BLACK};

|- についてはonItemClick()

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
    // You may wish to make these two variables class-global
    SharedPreferences settings = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = settings.edit();

    editor.putInt("mskin", COLOURS[position]);
    editor.commit();

    // For on the spot changes
    listView.setBackgroundColor(COLOURS[position]);

    // Your other code, as you wish, before or after, depends on how you need it.

|- あなたのその他の活動について、またはonCreate()すべての活動の中で、

SharedPreferences settings = getPreferences(MODE_PRIVATE);
listView.setBackgroundColor(settings.getInt("mskin", COLOURS[0]));
于 2013-04-15T06:43:08.817 に答える