状況
作ったiOSアプリをAndroidで実装してみようと思い立って、やってみているログになります。拙いところはご容赦下さい。
iOSとAndroidの思想の違いに困惑して、UIを探りながら進めています。
ログ
1日目
- 内容: MBAにかつて構築したAndroid開発環境を最新にしてみる
- 時間: 15分
一年前くらいに構築したものだったから結構バージョンが変わっていたので、インストールしました。あ、あとAndroidStudioも更新しました。
2日目
- 内容: Realmを入れる
- 時間: 15分
こちらを見れば簡単に出来ました。
Mavenを使ってrealmを入れます。
build.gradleファイルにcompile 'io.realm:realm-android:0.82.1'を追記して、syncします。
Android StudioのメニューからTools->Android->Sync Project with Gradle Filesを選択したり、ナビゲーションが出るのでそれをタップしたりして、syncします。
モデルを作ってみる
ユーザーモデルを作ってみました。
package com.example.android.actionbarcompat.shareactionprovider.models;
import io.realm.*;
import io.realm.annotations.*;
public class User extends RealmObject {
@PrimaryKey
private String name;
private int age;
@Ignore
private int sessionId;
// Standard getters & setters generated by your IDE…
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public int getSessionId() { return sessionId; }
public void setSessionId(int dontPersist) { this.sessionId = sessionId; }
}
Proguard対応
Realmのバージョンは0.81.1以降の場合。
以下を追記。
-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-dontwarn javax.**
-dontwarn io.realm.**
とりあえずビルドしてみる
とりあえずビルドも通りました。
この段階でswiftとは書き方がだいぶ違っていて、若干心が折れそうです。
3日目
- 内容: Tabbar形式でプロジェクトを立ち上げてみる
- 時間: 15分
Android Studioでプロジェクトを立ち上げるところから始めました。(Realmは再度入れました)
APIのバージョンなどを決めます
とりあえず15以上でやってみました。
新規プロジェクトの設定
Aciton Bar Tabs with ViewPager な Activity を作ってもらいます。
プロジェクトをビルドします。
確認
ビルドが終わってAndroid Studioが起きて、実装できるようになったら、Runしてみました。
(画像ではアプリ名がデフォルトから変更されています)
とりあえず表示されました!
今日はここまで
4日目
- 内容: タブメニューを変更してみる
- 時間:
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PlaceholderFragment.newInstance(position + 1);
}
@Override
public int getCount() {
return 5; // <- 5つタブを出したいので5にする
}
// ↓を↑に対応させる
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
case 3:
return getString(R.string.title_section4).toUpperCase(l);
case 4:
return getString(R.string.title_section5).toUpperCase(l);
}
return null;
}
Stringを調整する
<string name="title_section1">Section 1</string>
<string name="title_section2">Section 2</string>
<string name="title_section3">Section 3</string>
<string name="title_section4">Section 4</string>
<string name="title_section5">Section 5</string>
5日目
- 内容: option menuを追加してみる
- 時間:
AndroidのtabとiOSのtabがだいぶ違うことにやっと気づいたので、方針転換。
とりあえず、なんとかoption menuを追加してみる。
fooとbarのiconは常に表示させて、settingはスペースがある場合のみ表示という感じでいきたい。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:compat="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item
android:id="@+id/foo"
android:icon="@android:drawable/ic_menu_gallery"
compat:showAsAction="always" />
<item
android:id="@+id/bar"
android:icon="@android:drawable/ic_menu_add"
compat:showAsAction="always" />
<item
android:id="@+id/setting"
android:icon="@android:drawable/ic_menu_preferences"
compat:showAsAction="ifRoom"
android:title="@string/action_settings"
android:orderInCategory="100"
/>
</menu>
strings.xmlは割愛。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.foo:
return true;
case R.id.bar:
return true;
case R.id.setting:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
settingが消えるのも確認しました。
iconをタップすると次のActivityが立ち上がるようにする
- Activity(例、FooActivity)をつくります
- intentを渡します
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.foo:
showFoo();
return true;
・
・
・
private void showFoo() {
Intent intent = new Intent(this, FooActivity.class);
startActivity(intent);
}
とりあえず実現はできました。
=================================================