• 締切済み

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

  • Java
  • 回答数3
  • ありがとう数4

みんなの回答

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

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

amanojaku1
質問者

お礼

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

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

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

amanojaku1
質問者

お礼

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

amanojaku1
質問者

補足

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

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

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

amanojaku1
質問者

補足

「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

  • アンドロイド 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]画面に円が表示されない原因

    こんにちは。 以下のサイトを参考に白い画面に赤い円を表示させたいのですが、実際にはエミュレータ上に表示されません。 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); } }

  • 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アプリ開発

    Androidアプリを開発しているのですが、 エミュレータ、実機ともに実行するとプログラムが反映されておりません。 以下のソースを実行すると、 「Hello World!」のみ表示されます。 原因がわからないので、ご教授願えませんでしょうか。 【ソース】 package sib.stringex; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class StringEx extends Activity{ @Override public void onCreate(Bundle bundle){ super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); } } package sib.stringex; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class StringView extends View { public StringView(Context context){ super(context); setBackgroundColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas){ Paint paint= new Paint(); paint.setAntiAlias(true); paint.setTextSize(24); paint.setColor(Color.rgb(0, 0, 0)); canvas.drawText("画面サイズ:"+ getWidth()+ "X"+getHeight(), 0, 60, paint); canvas.drawText("文字幅:"+(int)paint.measureText("A"), 0, 60*2, paint); canvas.drawText("アセント"+(int)paint.ascent(), 0, 60*3, paint); canvas.drawText("ディセント"+(int)paint.descent(), 0, 60*4, paint); paint.setTextSize(24); paint.setColor(Color.rgb(255, 0, 0)); canvas.drawText("24dot", 0, 60*5, paint); paint.setTextSize(32); paint.setColor(Color.rgb(0, 255, 0)); canvas.drawText("32dot", 0, 60*6, paint); paint.setTextSize(48); paint.setColor(Color.rgb(0, 0, 255)); canvas.drawText("32dot", 0, 60*7, paint); } }

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

    タイトルの通りです>< 例えば次のようなプログラムがあったとします。 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プログラムについて

    多数の画像を、パラパラ漫画のように切り替えていく方法について相談があり、投稿させていただきました。 以前、xmlファイルで画像を読み込む方法が簡単だということで、hirotn様にご回答いただき、 動作させることができました。 ありがとうございました。 携帯の実機にインストールし、エラーも出ず動作することも確認できたのですが、 画像を切り替えるタイミングがあまりにも遅くなっており困っています。 画像が多い場合は、メモリ不足等起こっているのでしょうか。 プログラムで解決できる方法があれば教えていただきたく、よろしくお願いします。 (ちなみに、xmlファイルで読み出すファイルは100枚程度(80MB程度)です。 もっと数を増やしたり、画質をよくしたいとも思っております。) ※サンプルは下記で見つけました。 http://monoist.atmarkit.co.jp/mn/articles/1205/21/news003.html (以下、プログラム) package jp.test.animation.frame; import android.app.Activity; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class FrameAnimationTestActivity extends Activity { // ボタン Button mBtnAnimation; Button m5BtnAnimFromXML; // ビュー ImageView mImageAnimation; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mBtnAnimation = (Button) findViewById( R.id.button_animation ); m5BtnAnimFromXML = (Button) findViewById( R.id.button_anim_from_xml ); mImageAnimation = (ImageView) findViewById( R.id.image_animation ); mBtnAnimation.setOnClickListener(mClickListener); m5BtnAnimFromXML.setOnClickListener(mClickListener); } View.OnClickListener mClickListener = new View.OnClickListener() { public void onClick(View v) { // アニメーション中なら、停止 Drawable d = mImageAnimation.getBackground(); if( d != null ){ try{ if( ((AnimationDrawable) d).isRunning() ){ ((AnimationDrawable) d).stop(); return; } } catch( RuntimeException e ){ e.printStackTrace(); } } //if( v == mBtnAnimation ){ //frameAnimationTest( //FrameAnimationTestActivity.this, mImageAnimation ); //} if( v == m5BtnAnimFromXML ){ frameAnimationFromXMLTest( mImageAnimation ); } } }; // フレームアニメーションを XML から読み込む void frameAnimationFromXMLTest( View v ){ // リソースからアニメーションを読み込み、ビューに設定 v.setBackgroundResource( R.drawable.droid_jump ); // ビューからアニメーションを取り出し AnimationDrawable anim = (AnimationDrawable)v.getBackground(); // アニメーション開始 anim.start(); } }

  • javaで画像出力

    javaでプログラムを書いて画像をGIF、JPG、BMPなどの形式で表示させたいのです。 appletでは下記のプログラムで円を表示することができたので、これを他の形式で表示する方法を教えて下さい。 import java.applet.*; import java.awt.*; public class Sample1 extends Applet { public void paint(Graphics g) { g.fillOval(120,40,70,50); } }

  • AWTでウィンドウを閉じる仕組み

    import java.awt.*; import java.awt.event.*; class WindowClose extends WindowAdapter{ public void windowClosing(WindowEvent we){ System.exit(0); } } class Figure extends Frame{ public Figure(String name){ setTitle(name); setLocation(300,200); setSize(300,200); setBackground(Color.ORANGE); WindowClose wc = new WindowClose(); addWindowListener(wc); } } public class Test{ public static void main(String [] args){ Figure figure = new Figure("Frame1"); figure.show(); } } 初歩的なことな質問で申し訳ないです。 このような処理でウィンドウを閉じているのですが、具体的に何を取得してどんな動作をしているのかがよくわかりません。 wcというインスタンスにウィンドウリスナーのオブジェクトが追加登録されるという感じだと思いますが、extends されているWindowAdapterクラスにはすでにウィンドウリスナーのインスタンスが実装されていますよね。一体何の意味があるのでしょうか。

    • ベストアンサー
    • Java
  • 【java applet】他のクラスを呼び出して図形を描写するには

    はじめまして。 非常に簡単なことで、申し訳ないのですが質問させていただきます。 アプレットをextendsしたAppクラスで 他のMakeImgクラスのインスタンス(mi)を 作成し、MakeImgクラスのペイントメソッドを 実行して、図形を描写したいのですが、 下記のプログラムではコンパイルできても 図形が描写されません。 ペイントメソッドは明示的に呼び出さなくても 呼ばれるはずなので図形を描いてくれてもよさそうなのですが。。。 どなたか詳しい方、同じような問題を経験した方がいらっしゃったらぜひ回答していただければと思います。 それではよろしくお願い致します。 ////////////////////////////////////////////// import java.applet.Applet; import java.awt.*; /* <applet code="App.class" width="300"height="300"> </applet> */ public class App extends Applet {  MakeImg mi;  public void init()  {   mi = new MakeImg();  } } class MakeImg {  public void paint(Graphics g)  {   g.setColor(Color.white);   g.fillRect(0 , 0 , 300 , 300);   g.setColor(Color.black);   g.drawString("test",40,30);  } }

専門家に質問してみよう