AndroidとiPhoneのUIの実装方法を比較する
使えるUI部品の種類は似たり寄ったりですね。iPhoneはガベージコレクションが使えないのでオブジェクトの開放をしてやる必要があってめんどくさいです。
Viewの種類
iPhoneにはチェックボックスがなく代わりにUISwitchがあるのが面白いです。両者の違いはなんといっても階層データのナビゲーション方法の違いではないでしょう。Androidにはバックボタンがあるのでナビゲーション用のコントロールがありません。一方iPhoneはUINavigationBarというコントロールを使って階層データを表示させます。
iPhone | Android |
---|---|
UIView | View |
UIWindow | Window |
UIScrollView | ScrollView |
UITableView | ListView |
UIImageView | ImageView |
UIActionSheet | Dialog |
UIAlertView | AlertDialog |
UIProgressView | ProgressBar |
UIWebView | WebView |
UILabel | TextView |
UITextView | EditText |
UITextField | EditText |
UIButton | Button |
UISegmentedControl | RadioButton |
UIPicker | Spinner |
UIDatePicker | DatePickerDialog |
UISwitch | CheckBox,ToggleButton |
UISlider | SeekBar |
UIPageControl | −− |
UIToolbar | Menu |
UITabBar | TabHost |
UINavigationBar | −− |
−− | Gallery |
−− | GridView |
−− | SurfaceView※ |
MKMapView | MapView(オプション) |
Viewの追加
iPhone
- Interface Builderを使う場合
Interface BuilderでViewとControllerの接続を行う(省略)@interface HogeViewController : UIViewController { UILabel *label; } @property (nonatomic, retain) IBOutlet UILabel *label; @end @implementation @synthesize label; - (void)viewDidLoad { [super viewDidLoad]; label.text = @"Hello world!"; } - (void)dealloc { // メモリ領域の開放 [label release]; [super dealloc]; } @end
- Interface Builderを使わない場合
@implementation HogeViewController - (void)viewDidLoad { UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 20)]; label.text = @"Hello world!"; [self addSubView:label]; [label release]; } @end
Android
- レイアウトXMLを使う場合
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView id="@+id/label" android:text="Hello world!" android:layout_width="300sp" android:layout_height="wrap_content" /> </LinearLayout>
public class HogeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView label = (TextView)findViewById(R.id.label); label.setText("Hello world!"); } }
- レイアウトXMLを使わない場合
public class HogeActivity extends Activity { @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); TextView label = new TextView(this); label.setText("Hello world!"); label.setWidth(300); label.setHeight(20); setContentView(label); } }