画面表示について考える (1/6)
作成:2010-06-18 14:12
更新:2010-06-18 14:28
更新:2010-06-18 14:28
■画面の回転問題
Androidは、機器の角度(傾き)に関するセンサーを持っていて、機器を縦横にすると画面も自動的に縦向き・横向きに変わります。標準のGUIを使って画面を作成していれば、何も考えなくてもちゃんと向きが切り替わってくれます。これは非常に便利ですね。
が、実際にこれを試してみると、問題があることに気がつくでしょう。画面の向きが切り替わると、表示が初期状態に戻ってしまうのです。例えばプログラム的に表示を変更したりしていても、画面が切り替わった段階ですべて初期状態に戻ります。これはちょっとまずいですね。
実際に、簡単なサンプルを使って、この「画面の回転問題」について考えてみましょう。下にあげたソースコードは、ボタンを押すと入力されたテキストをラベルに表示する簡単なサンプルです。ここでは、main.xmlの<LinearLayout>タグ内に、以下のような部品が配置されている前提で作成しています。
これで、ボタンをクリックしてメッセージを変更した後、画面を回してみましょう。エミュレータで行う場合は、Ctrlキー+F11キーを押してください。これで左回りにエミュレータの画面が回転します。
回転すると、確かに表示されていたメッセージアが消え、「テキストを入力:」という初期状態に戻ってしまうはずです。画面の表示を回転させることには対応していますが、表示を保持し続ける機能はないのです。
が、実際にこれを試してみると、問題があることに気がつくでしょう。画面の向きが切り替わると、表示が初期状態に戻ってしまうのです。例えばプログラム的に表示を変更したりしていても、画面が切り替わった段階ですべて初期状態に戻ります。これはちょっとまずいですね。
実際に、簡単なサンプルを使って、この「画面の回転問題」について考えてみましょう。下にあげたソースコードは、ボタンを押すと入力されたテキストをラベルに表示する簡単なサンプルです。ここでは、main.xmlの<LinearLayout>タグ内に、以下のような部品が配置されている前提で作成しています。
<TextView android:id="@+id/text" />このように、TextView、EditText、ButtonがあるActivityで、ボタンを押すと入力フィールドのテキストを元に表示メッセージを変更しているわけですね。
<EditText android:id="@+id/edit" />
<Button android:id="@+id/btn" />
これで、ボタンをクリックしてメッセージを変更した後、画面を回してみましょう。エミュレータで行う場合は、Ctrlキー+F11キーを押してください。これで左回りにエミュレータの画面が回転します。
回転すると、確かに表示されていたメッセージアが消え、「テキストを入力:」という初期状態に戻ってしまうはずです。画面の表示を回転させることには対応していますが、表示を保持し続ける機能はないのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package jp.tuyano;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class SampleApp extends Activity {
private TextView text1;
private EditText edit1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text1 = (TextView)this.findViewById(R.id.text);
edit1 = (EditText)this.findViewById(R.id.edit);
Button btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
text1.setText("入力:" + edit1.getText());
}
});
}
}
※関連コンテンツ