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

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

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

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

button

HTMLで用いる<button>タグです。

Android Studio

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

Q&A

0回答

1504閲覧

[Android Studio] SpannableStringのsetSpanを重ねがけしたときにおかしな挙動をしてしまう

yuki_pooh117

総合スコア16

Java

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

button

HTMLで用いる<button>タグです。

Android Studio

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

0グッド

1クリップ

投稿2018/08/11 02:36

編集2022/01/12 10:55

前提・実現したいこと

Android StudioでJavaを用いて多機能メモ帳アプリの作成を試みています。
文字のサイズを変更する、文字の色を変更するボタンを作成し、実際に選択範囲の文字の大きさ、色を変更することに成功したのですが、それらのボタンを何度も押すと、大きさのボタンを押したのにもかかわらず色が変わってしまったり色のボタンを押したのにもかかわらず大きさが変わってしまったりします。一度だけ文字の色や大きさを変える分には問題ないのですがなぜでしょうか。
エラーは発生しておりません。

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

なし

試したこと

ここにソースコードを載せます 文字数の関係で必要ないものは省きます

MainActivity.java

Java

1public class MainActivity extends AppCompatActivity { 2 3 EditText editText; 4 Button sizeChange; 5 Button colorChange; 6 Button addImage; 7 Spinner spinner_size; 8 9 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 16 setSupportActionBar(toolbar); 17 18 //紐づけ 19 editText = (EditText)findViewById(R.id.editText); 20 sizeChange = (Button)findViewById(R.id.smallBtn); 21 colorChange = (Button)findViewById(R.id.ColorChange); 22 addImage = (Button)findViewById(R.id.addImage); 23 spinner_size = (Spinner)findViewById(R.id.spinner_size); 24 25 //選択可能に 26 editText.setTextIsSelectable(true); 27 //スクロール可能 28 //editText.setHorizontallyScrolling(true); 29 //最大の行数 30 editText.setMaxLines(10); 31 //最小の行数 32 editText.setMinLines(2); 33 //最大の横幅 34 editText.setMaxWidth(1000); 35 editText.setWidth(1000); 36 editText.setMaxHeight(1000); 37 editText.setHeight(1000); 38 //editText.setMaxEms(10); 39 editText.setBackgroundResource(R.color.toumei); 40 41 sizeChange.setOnClickListener(new View.OnClickListener() { 42 @Override 43 public void onClick(View v) { 44 if(editText.isFocused()){ 45 //Spinnerの文字列を数値に変換 46 int selectedNum = Integer.parseInt(spinner_size.getSelectedItem().toString()); 47 SpannableString spannable = new SpannableString(editText.getText()); 48 AbsoluteSizeSpan span = new AbsoluteSizeSpan(selectedNum); 49 spannable.setSpan(span,editText.getSelectionStart(),editText.getSelectionEnd(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 50 editText.setText(spannable); 51 } 52 } 53 }); 54 55 //ポップアップ表示 56 final PopupWindow popupWindow = new PopupWindow(); 57 //ポップアップウィンドウに表示するレイアウトの宣言 58 final LinearLayout popLayout = (LinearLayout)getLayoutInflater().inflate( 59 R.layout.color_pop,null); 60 //レイアウトをセット 61 popupWindow.setContentView(popLayout); 62 //横幅 63 popupWindow.setWidth(1200); 64 //縦幅 65 popupWindow.setHeight(800); 66 //背景を設定 67 popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.popup_background)); 68 final Button ColorPop = (Button)findViewById(R.id.ColorPop); 69 70 ColorPop.setOnClickListener(new View.OnClickListener() { 71 @Override 72 public void onClick(View v) { 73 if(!popupWindow.isShowing()){ 74 //ボタンのすぐ下に表示 75 popupWindow.showAsDropDown(v,0,0); 76 }else if(popupWindow.isShowing()){ 77 //消す 78 popupWindow.dismiss(); 79 } 80 } 81 }); 82 83 //ここまでポップアップ表示 84 85 86 //色の取得------------------------------------------- 87 88 89 final View white = popLayout.findViewById(R.id.white); 90 white.setOnClickListener(new View.OnClickListener() { 91 @Override 92 public void onClick(View v) { 93 ColorPop.setBackgroundColor(getBackgroundColor(v)); 94 } 95 }); 96 final View black = popLayout.findViewById(R.id.black); 97 black.setOnClickListener(new View.OnClickListener() { 98 @Override 99 public void onClick(View v) { 100 ColorPop.setBackgroundColor(getBackgroundColor(v)); 101 } 102 }); 103 final View gray = popLayout.findViewById(R.id.gray); 104 gray.setOnClickListener(new View.OnClickListener() { 105 @Override 106 public void onClick(View v) { 107 ColorPop.setBackgroundColor(getBackgroundColor(v)); 108 } 109 }); 110 final View silver = popLayout.findViewById(R.id.silver); 111 silver.setOnClickListener(new View.OnClickListener() { 112 @Override 113 public void onClick(View v) { 114 ColorPop.setBackgroundColor(getBackgroundColor(v)); 115 } 116 }); 117 final View red = popLayout.findViewById(R.id.red); 118 red.setOnClickListener(new View.OnClickListener() { 119 @Override 120 public void onClick(View v) { 121 ColorPop.setBackgroundColor(getBackgroundColor(v)); 122 } 123 }); 124 final View yellow = popLayout.findViewById(R.id.yellow); 125 yellow.setOnClickListener(new View.OnClickListener() { 126 @Override 127 public void onClick(View v) { 128 ColorPop.setBackgroundColor(getBackgroundColor(v)); 129 } 130 }); 131 final View lime = popLayout.findViewById(R.id.lime); 132 lime.setOnClickListener(new View.OnClickListener() { 133 @Override 134 public void onClick(View v) { 135 ColorPop.setBackgroundColor(getBackgroundColor(v)); 136 } 137 }); 138 final View aqua = popLayout.findViewById(R.id.aqua); 139 aqua.setOnClickListener(new View.OnClickListener() { 140 @Override 141 public void onClick(View v) { 142 ColorPop.setBackgroundColor(getBackgroundColor(v)); 143 } 144 }); 145 final View blue = popLayout.findViewById(R.id.blue); 146 blue.setOnClickListener(new View.OnClickListener() { 147 @Override 148 public void onClick(View v) { 149 ColorPop.setBackgroundColor(getBackgroundColor(v)); 150 } 151 }); 152 final View fuchsia = popLayout.findViewById(R.id.fuchsia); 153 fuchsia.setOnClickListener(new View.OnClickListener() { 154 @Override 155 public void onClick(View v) { 156 ColorPop.setBackgroundColor(getBackgroundColor(v)); 157 } 158 }); 159 final View maroon = popLayout.findViewById(R.id.maroon); 160 maroon.setOnClickListener(new View.OnClickListener() { 161 @Override 162 public void onClick(View v) { 163 ColorPop.setBackgroundColor(getBackgroundColor(v)); 164 } 165 }); 166 final View olive = popLayout.findViewById(R.id.olive); 167 olive.setOnClickListener(new View.OnClickListener() { 168 @Override 169 public void onClick(View v) { 170 ColorPop.setBackgroundColor(getBackgroundColor(v)); 171 } 172 }); 173 final View green = popLayout.findViewById(R.id.green); 174 green.setOnClickListener(new View.OnClickListener() { 175 @Override 176 public void onClick(View v) { 177 ColorPop.setBackgroundColor(getBackgroundColor(v)); 178 } 179 }); 180 final View teal = popLayout.findViewById(R.id.teal); 181 teal.setOnClickListener(new View.OnClickListener() { 182 @Override 183 public void onClick(View v) { 184 ColorPop.setBackgroundColor(getBackgroundColor(v)); 185 } 186 }); 187 final View navy = popLayout.findViewById(R.id.navy); 188 navy.setOnClickListener(new View.OnClickListener() { 189 @Override 190 public void onClick(View v) { 191 ColorPop.setBackgroundColor(getBackgroundColor(v)); 192 } 193 }); 194 final View purple = popLayout.findViewById(R.id.purple); 195 purple.setOnClickListener(new View.OnClickListener() { 196 @Override 197 public void onClick(View v) { 198 ColorPop.setBackgroundColor(getBackgroundColor(v)); 199 } 200 }); 201 202 203 //ここまで色の取得--------------------------------------------- 204 205 //色を変更 206 colorChange.setOnClickListener(new View.OnClickListener() { 207 @Override 208 public void onClick(View v) { 209 if(editText.isFocused()){ 210 SpannableString spannable = new SpannableString(editText.getText()); 211 ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(getBackgroundColor(ColorPop)); 212 spannable.setSpan(foregroundColorSpan,editText.getSelectionStart(),editText.getSelectionEnd() ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); 213 editText.setText(spannable); 214 } 215 } 216 }); 217 } 218 //背景色を取得して返す 219 public int getBackgroundColor(View v){ 220 ColorDrawable colorDrawable = (ColorDrawable)v.getBackground(); 221 int colorInt = colorDrawable.getColor(); 222 return colorInt; 223 } 224}

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

AndroidStudio2.3.3

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問