• 締切済み
  • 暇なときにでも

Android R.color

「values/colors.xml」内に「<color name="orange">#ffa500</color>」とか設定して、プログラムから下記みたいな感じで取得しようとするとエラーになってしまいます。 プログラムからリソースのカラーの値を取得する方法を ご存知の方が いらっしゃいましたら ご教授下さいm(_ _)m ~ import android.graphics.Color; ~ public class MainActivity extends AppCompatActivity { ~ int c = Color.parseColor(getString(R.color.orange)); ~

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数610
  • ありがとう数4

みんなの回答

  • 回答No.3
  • HNEX
  • ベストアンサー率62% (43/69)

AppCompatActivityでの環境を作って試してみました。 なるほどAndroid API level 23以前と以降では使い分けが必要な変更が入っていますね 対処としてはContextCompatを使うのがベターなようですね。 ContextCompat.getColorを使用する事でバージョンに合わせた適切な処理分岐がなされるようになります import android.support.v4.content.ContextCompat; int c = ContextCompat.getColor(this, R.color.orange);

共感・感謝の気持ちを伝えよう!

質問者からのお礼

書き忘れましたが、こちらも出来ておりますm(_ _)m

関連するQ&A

  • [android]画面に円が表示されない原因

    こんにちは。 以下のサイトを参考に白い画面に赤い円を表示させたいのですが、実際にはエミュレータ上に表示されません。 logcatのエラーもありません。原因と対処方法をご教授ください。 eclipseのバージョンは以下のとおりです。 Eclipse Platform 3.8.0.v20120607-071945-9gF7jI7nG5qByXMVdkhRMWBQlF4PnDCLybDCPQ http://www.hakkaku.net/articles/20091127-594 ★MainActivity.java package com.example.test001_001; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 描画クラスを設定 setContentView(new TestDrawView(getApplication())); } /* 描画用クラス */ class TestDrawView extends View { public TestDrawView(Context c) { super(c); } } // このメソッドで描画を行う protected void onDraw(Canvas c) { // --------- (*1)Check!! c.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(Color.RED); p.setStyle(Paint.Style.FILL); c.drawCircle(100, 100, 50, p); } }

  • アンドロイド JAVA 警告

    アンドロイド 初心者です package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new testView(this)); } class testView extends View { public testView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawLine(0, 0, 100, 50, paint); } } } このプラグラムで"Paint paint = new Paint();"のところで "Avoid object allocations during draw/layout operations (preallocate and reuse instead)" の警告が出ます、これを取る方法はありませんか。

    • ベストアンサー
    • Java
  • Androidのボタン押下のイベント

    初めてボタンを付けました。 きちんと動作しましたが、ボタンと関係のないアプリの名前の変更などをしていたら ボタンを押してもMainActivity.javaの public class MainActivity extends Activity implements OnClickListener { ・・・ public void onClick(View v) { Toast.makeText(this, "ボタンが押されました", Toast.LENGTH_LONG).show(); } がいつの間にか動作しなくなりました。 ボタンを押すとボタンは勝手に青くなって標準の音も出ますが、"ボタンが押されました"が表示されなくなりました。 どこを見直したらよいですか?

    • ベストアンサー
    • Java
  • 回答No.2
  • HNEX
  • ベストアンサー率62% (43/69)

> E/AndroidRuntime: FATAL EXCEPTION: main > E/AndroidRuntime: java.lang.NoSuchMethodError: example.com.surfaceview.MainActivity.getColor MainActivity.getColorでNoSuchMethodErrorエラーが発生していますね NoSuchMethodErrorが起きるのはコンパイル時には存在したが実際の実行時にはそのメソッドが存在しなかった場合に発生するものです 実際に実行している環境に問題があるか、OSバージョンによる何かでしょうか

共感・感謝の気持ちを伝えよう!

質問者からのお礼

> MainActivity.getColorでNoSuchMethodErrorエラーが発生していますね > NoSuchMethodErrorが起きるのはコンパイル時には存在したが実際の実行時にはそのメソッドが存在しなかった場合に発生するものです > 実際に実行している環境に問題があるか、OSバージョンによる何かでしょうか 断定はできませんが、Activity が「AppCompatActivity」を継承しているからのように思われます。 ググてみると「getColor(color)」非推奨→「getResources().getColor(color)」非推奨→「ContextCompat.getColor(context, color)」推奨となっているようです。 ちなみに Context は下記の3通りあり、通常は「getApplicationContext()」で OK のようです。 > // System 共通の Context:別の Application とやりとりするとき。 > oBaseContext = getBaseContext( ); > // Application 固有の Context(Application ごとに Context が変化する):Application 共通のモノが対象。 > oAppContext = getApplicationContext( ); > // Activity 固有の Context(Activity ごとに Context が変化する):Activity に依存モノが対象。 > oContext = this; import したパッケージは下記のとおり。 import android.support.v4.content.ContextCompat; import android.content.Context;

質問者からの補足

下記は「onCreate()」メソッド内で実行する。 > // System 共通の Context:別の Application とやりとりするとき。 > Context oBaseContext = getBaseContext( ); > // Application 固有の Context(Application ごとに Context が変化する):Application 共通のモノが対象。 > Context oAppContext = getApplicationContext( ); > // Activity 固有の Context(Activity ごとに Context が変化する):Activity に依存モノが対象。 > Context oContext = this;

  • 回答No.1
  • HNEX
  • ベストアンサー率62% (43/69)

Activityからなら int c = getColor(R.color.orange);

共感・感謝の気持ちを伝えよう!

質問者からの補足

「getColor」で実行時エラーが発生してしまうようです。 > E/AndroidRuntime: FATAL EXCEPTION: main > E/AndroidRuntime: java.lang.NoSuchMethodError: example.com.surfaceview.MainActivity.getColor なにか「import」が必要でしょうか? 現在の「import」は下記の とおりです(Activity は「AppCompatActivity」を継承しています)。 > import android.os.Bundle; > import android.util.Log; > import android.app.Activity; > import android.support.v4.view.MenuItemCompat; > import android.support.v7.app.AppCompatActivity; > import android.support.v7.app.ActionBar; > import android.support.v7.widget.Toolbar; > > import android.content.pm.PackageInfo; > import android.content.pm.PackageManager; > import android.content.pm.PackageManager.NameNotFoundException; > > import android.view.Menu; > import android.view.MenuInflater; > import android.view.MenuItem; > > import android.view.View; > import android.view.SurfaceView; > import android.view.SurfaceHolder; > import android.widget.TextView; > import android.view.KeyEvent; > > import android.graphics.Canvas; > import android.graphics.Paint; > import android.graphics.Paint.Style; > import android.graphics.Color; > > import java.util.ArrayList;

関連するQ&A

  • Android PhoneGap WebSetti

    メソッド setDefaultZoom(WebSettings.ZoomDensity) は型 WebSettings で使用すべきではありません という警告がEclipseで出ます。 以下のソースの最後の行が警告の対象です。 適切な対応を行いたいのですが、どのようにするとよいでしようか? android:targetSdkVersion="19" とするとこの警告はでなくなりますが、いつかは19のようにバージョンを上げることになると思うので、今から既に19で進めていきたいです。 // AndroidManifest.xml <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> // MainActivity.java public class MainActivity extends DroidGap { @Override public void onCreate(Bundle b) {    super.onCreate(b);    ・・・    settings.setDefaultZoom(ZoomDensity.MEDIUM);

    • ベストアンサー
    • Java
  • Android用ゲームを作っています。

    現在Androidゲームを作っているのですが、現在時間を取得し、時刻を表示したり、背景画像などを変えたりしたいのですがどのように取得し、表示させればいいのでしょうか?ソースコードは ・MainActivity.java package andorid.eample.game2; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); setContentView(l); l.addView(new PView(this, null, 0)); } } ・PView.java package andorid.eample.game2; import android.annotation.SuppressLint;4 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import android.content.res.Resources; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.text.format.Time; import android.media.MediaPlayer; public class PView extends View{ Paint paint = new Paint(); Date date = new Date(); int flg = 0; int charaX =250; int charaY = 250; Resources res = this.getContext().getResources(); Bitmap bg = BitmapFactory.decodeResource(res, R.drawable.bg1); Bitmap chara = BitmapFactory.decodeResource(res, R.drawable.charan); Bitmap charaT = BitmapFactory.decodeResource(res, R.drawable.charat); Bitmap box= BitmapFactory.decodeResource(res, R.drawable.boxt); //音楽読み込み MediaPlayer se = MediaPlayer.create(getContext(),R.raw.ehehe); public PView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs); // TODO 自動生成されたコンストラクター・スタブ } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas c){ c.drawBitmap(bg,0,100,paint); if(flg == 0) { c.drawBitmap(chara,charaX,charaY,paint); } if(flg == 1) { c.drawBitmap(charaT,charaX,charaY,paint); c.drawBitmap(box,50,200,paint); } invalidate(); } public boolean onTouchEvent(MotionEvent me) { //タッチされた時 if(me.getAction() == MotionEvent.ACTION_DOWN) { if(me.getAction() == MotionEvent.ACTION_DOWN) { if(flg == 0) { flg = 1; se.start(); } else{ flg =0; } } } return false; } } このような感じになっています どうかアドバイスをお願いします。

    • ベストアンサー
    • Java
  • android開発 map コンテナのエラー

    今学校でandroid開発の課題が出ているのですが、エラーの原因が分かりません。 javaの勉強はしていますが、android開発は初めてです。 http://note.chiebukuro.yahoo.co.jp/detail/n237584 上のURLのmapを作成しているのですが、MainActivity.javaでエラーが検出されました。 public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()) .commit(); } } ・ ・ ・ 上のcontainerでエラーとなりました。どうしたらエラーがなくなるのか教えてください。

  • PhoneGapとjavaの変数の取得

    TELEPHONY_SERVICEのgetDeviceId()で取得できる値をPhoneGapから取得する方法を教えてください。 直接取得できるなら直接の方法を教えてください。 MainActivity.javaにgetDeviceId()で取得した値をグローバル変数などに代入してPhoneGapでJavaScriptなどでその値を参照することができましたらその方法も教えてください。

    • ベストアンサー
    • Java
  • AndroidにおけるSQLiteの使い方について

    Android Studioで、Androidのアプリを開発しています。 SQLiteを使おうとすると、 クエリを送るタイミングでアプリケーションが停止してしまいます。 何が悪いんでしょうか。 以下の様なソースコードで停止しました。 #MyDbOpenHelper.java package com.example.test10; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by taiki on 13/06/16. */ public class MyDbOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = "board"; private static final String THREAD_TABLE_NAME = "thread"; private static final String THREAD_TABLE_COLUMN1 = "column1"; private static final String THREAD_TABLE_CREATE = "CREATE TABLE " + THREAD_TABLE_NAME + " (" + THREAD_TABLE_COLUMN1 + " text;"; MyDbOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(THREAD_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { } } #MainActivity.java package com.example.test10; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyDbOpenHelper dbHelper; dbHelper = new MyDbOpenHelper(MainActivity.this); SQLiteDatabase db = dbHelper.getReadableDatabase(); db.execSQL("CREATE TABLE thread (threadNumber integer primary key autoincrement,mainText TEXT, createDate date);"); } @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; } }

  • ロード中の画面

    いつもお世話になっております。 androidアプリの開発は行っております。 まだ経験が乏しいため、お力をお貸しいただきたく存じます。 下記ページを参考にロード中の画面を表示するようにしています。 https://sites.google.com/site/technoute/android/thread/thread_progress MainActivity.java ------------------------------------------------------------ public boolean onTouchEvent(MotionEvent event) {   // loading   this.m_SimpleThread = new AsyncTaskProgressDialogSimple(this);   this.m_SimpleThread.execute();   // TopActivity   Intent intent = new Intent(MainActivity.this, TopActivity.class);   startActivity(intent);   return super.onTouchEvent(event); } MainActivity.java でタップした時に、ロード画面を生成して TopActivity.javaに画面遷移しています。 TopActivity.java ------------------------------------------------------------ protected void onCreate(Bundle savedInstanceState) {   // http://&#65374;に接続して、jsonデータから一覧表示を生成 } TopActivity.java ではjsonデータを取得して一覧表示しています。 その間も、MainActivity.java で生成したロード画面を表示しておきたいと思います。 よろしくご教示お願いいたします。

  • android inflateメソッドについて

    eclipseから「新規アプリケーション・プロジェクト」でプロジェクトを作成すると下記のコードが自動作成されます。 package com.example.hello; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @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; } } この中で、inflateメソッドにカーソルを当てると  void android.view.MenuInflater.inflate(int menuRes, Menu menu) が表示されるので、MenuInflaterクラスのメソッドだと確認できます。 しかし、import文でMenuInflaterクラスを定義していないのになぜ使用できるのでしょうか。

  • 現在AndroidSDKにてゲームを製作して

    いるのですが、ゲーム画面は出来ているのですが、ゲームスタート画面、ゲームオーバー画面を作りたいのですがどうすればよろしいのでしょうか、スタート画面はタッチされたらゲーム画面に切り替わるようにしたいです。 ソースは メインアクティビティーは package android.game; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); setContentView(l); l.addView(new textview(this, null, 0)); l.addView(new PView(this, null, 0)); } } で、ゲーム画面のクラスは package android.game; import android.annotation.SuppressLint; import android.content.Context; import android.game.R.id; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import android.widget.Toast; import java.util.Random; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Paint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.Random; public class PView extends View{ Paint paint = new Paint(); int player = 0; int playerV = 20; int tamaV = 20; int x = 100; int y = 50; int tamaY = player; int tamaX = player; int line = 550; int tama2X = 0; int tama2Y = 0; int linex = 400; int cnt = 0; int score = 0; int timerT = 30; int flg = 0; int stx = 200; int sty = 200; Random rand = new Random(); Resources res = this.getContext().getResources(); Bitmap bg = BitmapFactory.decodeResource(res, R.drawable.haikei); Bitmap pl = BitmapFactory.decodeResource(res, R.drawable.player); Bitmap tama = BitmapFactory.decodeResource(res, R.drawable.tama); Bitmap tama2 = BitmapFactory.decodeResource(res, R.drawable.tama2); Bitmap lineview = BitmapFactory.decodeResource(res, R.drawable.line); Bitmap lineview2 = BitmapFactory.decodeResource(res, R.drawable.line2); public PView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs); // TODO 自動生成されたコンストラクター・スタブ } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas c){ timerT--; if(timerT < 0) { timerT = 0; } player += playerV; if(player<0 || 400<player) playerV *= -1; //弾の処理 tamaY+= 0; tama2Y += 20; if(tamaY > getHeight()) { tamaY = rand.nextInt(500)+1; } tamaX = rand.nextInt(30); tama2Y += 20; if(tama2Y > getHeight()) { tama2Y = rand.nextInt(500)+1; } tama2X = rand.nextInt(100); c.drawBitmap(bg,0,0,paint); c.drawBitmap(pl,player,y, paint); c.drawBitmap(tama,player,tamaY,paint); c.drawBitmap(tama2,tama2X,tama2Y, paint); c.drawBitmap(lineview,0,line,paint); c.drawBitmap(lineview2,0,linex, paint); invalidate(); } public boolean onTouchEvent(MotionEvent me) { //タッチされた時 if(me.getAction() == MotionEvent.ACTION_DOWN) stx = 0; { if(me.getAction() == MotionEvent.ACTION_DOWN) { if(tamaY >= line && tamaY < line + 40) { tamaY = 0; score+= 10; } } if(me.getAction() == MotionEvent.ACTION_DOWN){ if(tama2Y >= linex && tama2Y < linex + 50) { tama2Y = 0; score+= 20; } } return true; } } } このようになっています。 よろしくお願いします

  • アプレットでパッケージ指定した際の実行方法を教えてください。

    タイトルの通りです>< 例えば次のようなプログラムがあったとします。 package draw; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; /* <applet code="BackGroundColor.class" width="200" height="200"> </applet>*/ public class BackGroundColor extends Applet { public void paint(Graphics g) { setBackground(Color.cyan); setForeground(Color.lightGray); g.fillOval(10, 10, 180, 100); } } 面倒なのでタグはソース内に書き込みます。 これをアプレットビューアで確認するときに appletviewer BackGroundColor.java とやると「アプレットは初期化されていません」と怒られるわけです。 ですが、「package draw;」を消して、コンパイル後、実行すると 見事成功します。 パッケージ指定したときの実行方法を教えてください><

    • ベストアンサー
    • Java
  • Androidのマルチスレッド処理の開始タイミング

    組み込みボード上にAndroidOSをのせ、 その上でRS232C通信制御するプログラムを作成しております。 RS232C通信制御についてはThreadクラスを派生させたクラスを 作成し、マルチスレッド処理として、アプリ起動中に、常に動作させたい と考えています。 このとき、RS232C通信制御するスレッドを 開始するタイミング、終了するタイミングはメインアクティビティのどの タイミングで行うのが1番よいのでしょうか? 現状は以下で考えています。 public class MainActivity extends Activity { ComCtrl m_ComCtrl ; // RS232C通信制御スレッド protected void onCreate(Bundle savedInstanceState) { m_ComCtrl = new ComCtrl( null ) ; // スレッド生成 m_ComCtrl.start() ; // スレッド開始 } protected void onDestroy() { m_ComCtrl.halt() ; // スレッド終了(スレッドメインループを終了させる独自メソッド) } }

    • ベストアンサー
    • Java