ラベル UI の投稿を表示しています。 すべての投稿を表示
ラベル UI の投稿を表示しています。 すべての投稿を表示

2011年7月21日木曜日

[Android] チェックボックスの制御をする

一日のTODOリストを作成中です。
最初なのでチェックボックスの制御方法など。

まずはチェックボックスを作ります。






















とりあえずこんだけ。
これ自体はXMLの記述だけなのでLayoutのXMLに延々とチェックボックスを追加するだけです。

    
    
    


LinearLayoutの中にチェックボックスを追加するだけの簡単なお仕事。
もちろんチェックボックスが動作しないと話にならないのでコードも書きます。
今回は簡易的にチェックボックスにチェックが入ったらトーストを出力するだけにしましょう。
イメージとしてはこんな感じ。






















クリック時の動作はコードに書きます。
OnClickListenerをはっておいて、クリック時のイベントを拾います。
チェックボックスが複数なのでチェックボックスのIDによって処理を振り分けます。

処理としてはこんな感じです。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.Toast;

public class CheckActivity extends Activity implements OnClickListener {
 
 CheckBox mCheckTooth;
 CheckBox mCheckHair;
 CheckBox mCheckBody;
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mCheckTooth = (CheckBox)findViewById(R.id.toothCheck);
        mCheckHair = (CheckBox)findViewById(R.id.hairCheck);
        mCheckBody = (CheckBox)findViewById(R.id.bodyCheck);
        
        mCheckTooth.setOnClickListener(this);
        mCheckHair.setOnClickListener(this);
        mCheckBody.setOnClickListener(this);
        
    }
  
 @Override
 public void onClick(View view) {
  
  switch (view.getId()) {
  case R.id.toothCheck:
   if(mCheckTooth.isChecked()) {
    // 歯を磨いた
    Toast.makeText(this, "歯を磨いたね", Toast.LENGTH_LONG).show();
   } 
   break;
  case R.id.hairCheck:
   if(mCheckHair.isChecked()) {
    // 髪を洗った
    Toast.makeText(this, "髪を洗ったね", Toast.LENGTH_LONG).show();
   }
   break;
  case R.id.bodyCheck:
   if(mCheckBody.isChecked()) {
    // 体を洗った
    Toast.makeText(this, "体を洗ったね", Toast.LENGTH_LONG).show();
   }
   break;
  default:
   Toast.makeText(this, "何したんだ!!", Toast.LENGTH_LONG).show();
   break;
    
  }
  
 }
}

こうすると押されたチェックボックスに対応して処理が変化します。
(上記の場合はメッセージが変化します)



チェックボックスの簡単な使い方はこんな感じです。

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がでてくるとがっかりだよね、ということで。