2011年5月23日月曜日

[Android] アプリの背景色を設定した後のToastの背景色がおかしくなるのをなんとかする。

Androidのアプリを作成した際に
背景色などを固定したとする。

style.xml


    


androidManifest.xml(一部)


        
            
                
                
            
        
        
    


これで背景色と文字色がアプリケーション単位で固定できるのですが、
うっかりToastまでこんなことになります。






















Toastの透過の問題なのかどうだかしりませんが、
コードはこんな感じのいたって普通。
Toast.makeText(this, "ほめてくれてありがとう", Toast.LENGTH_LONG).show();

この1行だけであの大惨事・・・。
リファレンスにも特にToastに関することはなにもかかれていない。
それでもなんとか、Toastに「setView()」なるものを発見したので
諦めて1つViewを作成することにしました。

といっても、XMLには詳しくないので
コードでゴリゴリと。

こんなメソッドを作成。

public View makeToast(String message) {
  TextView text = new TextView(this);
  text.setBackgroundColor(Color.WHITE);
  text.setText(message);
  text.setPadding(5, 5, 5, 5);
  
  return text;
 }

これだとstring.xmlが使えなくてしょうもないので書き変えてみる。
public View makeToast(int messageId){
  TextView text = new TextView(this);
  text.setBackgroundColor(Color.WHITE);
  text.setText(messageId);
  text.setPadding(5, 5, 5, 5);
  
  return text;
 }

で、実際にToastを使用するところでこうする。
Toast toast = new Toast(this);
   toast.setView(makeToast("ほめてくれてありがとう"));
   toast.show();

string.xmlに定義している文字列を使うときはこうする。
Toast toast = new Toast(this);
   toast.setView(makeToast(R.string.talk_atama1));
   toast.show();
(ID名のセンスがない。すまん)

要するにViewを継承しているTextViewを自前で作成して
ToastのViewとしてセットして表示しているだけです。
実際にはこんな感じのポップアップになります。




















純粋なToastみたいな角丸なものにするには
もうちょっとこったものにしたりとかする必要があるのですが、
応急処置としてこちらをつくってみました。
いくらなんでも背景色にとけこんだToastがでてくるとがっかりだよね、ということで。

0 件のコメント:

コメントを投稿