質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2306閲覧

Android studio ボタンの色を押すたびに変える

schrodinger0120

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/09/10 00:23

編集2020/09/10 05:18

前提・実現したい

android studioで、3×3のボタンがあるんですが、そのボタンの1つを押すとそのボタンと上下左右のボタンの色が変える
ってやつをやりたいんですが、どうやったらいいですかね?
色は2色でcolors.xmlでxとyって名前になってます。

一応ボタンの色がxの時はyにyの時はxにするって処理なんですが

自分は
Button button=findViewById(R.id. button)
button.setBackgroundColor(y)
とかで色を変える方法しかしらなくて

特定のボタンが押された時xなのかyなのか判断する方法がわからないんですよね

誰かわかる方教えてください

発生している問題・エラーメッセージ

ifやSwitchなどで判断しようとは思っているんですが、色の判断内容がわからない

該当のソースコード

java

試したこと

自分は
Button button=findViewById(R.id. button)
button.setBackgroundColor(y)
とかで色を変える方法しかしらなくて

ifやSwitchで色を判断してやろうと思ったんですが、その色の判断の方法がわからなくて困って居ます

補足情報(FW/ツールのバージョンなど)

一応自分の作ってるやつ載せておきます。

java:br

1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5  super.onCreate(savedInstanceState); 6  setContentView(R.layout.activity_main); 7 8  Button button_r = 9  findViewById(R.id.button_r); 10 button_r.setOnClickListener(new MyClickListener()); 11 12  Button button1= 13  findViewById(R.id.button); 14  button1.setOnClickListener(new Click()); 15 16  Button button2= 17  findViewById(R.id.button2); 18  button2.setOnClickListener(new Click()); 19 20//3~8も同じ 21 22 23  Button button9= 24  findViewById(R.id.button9); 25  button9.setOnClickListener(new Click()); 26 }

//ここはリセットなのできにしないで

java:rb

1 class MyClickListener implements View.OnClickListener { 2  @Override 3  public void onClick(View v) { 4   Toast.makeText(MainActivity.this, "リセットしました", Toast.LENGTH_SHORT).show(); 5 6   Button button= 7   findViewById(R.id.button); 8   Button button1= 9   findViewById(R.id.button2); 10   Button button2= 11   findViewById(R.id.button3); 12   Button button3= 13   findViewById(R.id.button4); 14   Button button4= 15   findViewById(R.id.button5); 16   Button button5= 17   findViewById(R.id.button6); 18   Button button6= 19   findViewById(R.id.button7); 20   Button button7= 21   findViewById(R.id.button8); 22   Button button8= 23   findViewById(R.id.button9); 24 25   int y= getResources().getColor(R.color.y); 26   //R.color.xxx は name=”xxx”とした時 27   button.setBackgroundColor(y); 28   // view は変更対象の部品に適宜置き換える 29   button1.setBackgroundColor(y); 30   // view は変更対象の部品に適宜置き換える 31   button2.setBackgroundColor(y); 32   // view は変更対象の部品に適宜置き換える 33   button3.setBackgroundColor(y); 34   button4.setBackgroundColor(y); 35   button5.setBackgroundColor(y); 36   button6.setBackgroundColor(y); 37   button7.setBackgroundColor(y); 38   button8.setBackgroundColor(y); 39 40  } 41 }

//ここから悩んでる所です。

 ```java:abr
class Click implements View.OnClickListener {
@Override
public void onClick(View v) {
int y=
getResources().getColor(R.color.y);
int x=
getResources().getColor(R.color.x);

   switch (v.getId()) {
case (R.id.button):
//ここをif文とかで判定したい
Button button=
findViewById(R.id.button);
button2.setBackgroundColor(x);
//if(ここがわからない)
break;
case (R.id.button2):
break;
case (R.id.button3):
Toast.makeText(MainActivity.this, "3がおされた", Toast.LENGTH_SHORT).show();
break;
//4から9も同じ感じで
}
}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AtsushiYonenaga

2020/09/10 00:33

ソースコードのインデントが見づらいので、バッククオーテーション3つで囲んでもらえますか?
schrodinger0120

2020/09/10 01:22

見づらいというのはどこからどこまでが一つ?のプログラムかわからないから段落ごとにまとめてという認識で間違えてないでしょうか?
AtsushiYonenaga

2020/09/10 01:38 編集

ソースコードをペーストした時点では、階層に応じてインデントされていると思うのですが、投稿後はインデントが無視されて左揃えで表示されています。これはプログラムの階層がわかりづらく、読みづらいです。 ソースコードはインデントが保持されるように、バッククオート3つで囲んでください。 バッククオート3つで囲まれたコードブロックはteratailのエディタの <code> と言うボタンで挿入できます。
AtsushiYonenaga

2020/09/10 03:37

「ソースコードの最初の行の前」と「ソースコードの最後の行の後」にバッククオーテーション3つの行を入れてください。
AtsushiYonenaga

2020/09/10 05:21

対応ありがとうございます!見やすくなりました!
guest

回答1

0

ベストアンサー

以下のリンク先によると

Get the background color of a button in android

Java

1int colorId = button.getColor(); 2

のようにして色のリソースIDを取得し

Java

1if (colorID == R.color.y) { 2 log("color is y"); 3}

というように同じかどうか比較することで判定が可能なのではないでしょうか。

設計の改善提案

ちなみに、今回のケースのように2種類の色の間でスイッチするような作りの場合、ボタンの色を検出して判定するのはあまり良い設計とは思えません。

可能であれば、Boolean型かEnum型の3x3の2次元配列を作り、ボタンが何色であるべきかという状態はその配列上で管理し、変更があるたびに全てのボタンに対して配列全体の色を反映するようにした方がいいでしょう。

投稿2020/09/10 05:48

編集2020/09/10 05:49
AtsushiYonenaga

総合スコア116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

schrodinger0120

2020/09/10 12:19

ありがとうございます!配列考えてませんでした!ちょっと試しに配列でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問