LoginSignup
13
12

More than 5 years have passed since last update.

[Android] 2回目のAndroid開発入門 - 1 - AndroidStudio, Realm, ActionBar(tab, menu), Intent

Posted at

状況

作ったiOSアプリをAndroidで実装してみようと思い立って、やってみているログになります。拙いところはご容赦下さい。
iOSとAndroidの思想の違いに困惑して、UIを探りながら進めています。

ログ

Screen Shot 2015-09-07 at 15.21.31.png

1日目

  • 内容: MBAにかつて構築したAndroid開発環境を最新にしてみる
  • 時間: 15分

 一年前くらいに構築したものだったから結構バージョンが変わっていたので、インストールしました。あ、あとAndroidStudioも更新しました。

Screen Shot 2015-09-07 at 15.21.53.png

2日目

  • 内容: Realmを入れる
  • 時間: 15分

こちらを見れば簡単に出来ました。
Mavenを使ってrealmを入れます。
build.gradleファイルにcompile 'io.realm:realm-android:0.82.1'を追記して、syncします。

Screen Shot 2015-09-09 at 13.04.00.png

Screen Shot 2015-09-09 at 13.41.17.png

Android StudioのメニューからTools->Android->Sync Project with Gradle Filesを選択したり、ナビゲーションが出るのでそれをタップしたりして、syncします。

Screen Shot 2015-09-09 at 13.04.05.png

Screen Shot 2015-09-09 at 13.03.43.png

Screen Shot 2015-09-09 at 13.04.38.png

モデルを作ってみる

ユーザーモデルを作ってみました。

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以降の場合。

Screen Shot 2015-09-09 at 13.43.05.png

以下を追記。

-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-dontwarn javax.**
-dontwarn io.realm.**

Screen Shot 2015-09-09 at 13.43.11.png

とりあえずビルドしてみる

とりあえずビルドも通りました。
この段階でswiftとは書き方がだいぶ違っていて、若干心が折れそうです。

3日目

  • 内容: Tabbar形式でプロジェクトを立ち上げてみる
  • 時間: 15分

Android Studioでプロジェクトを立ち上げるところから始めました。(Realmは再度入れました)

APIのバージョンなどを決めます

Screen Shot 2015-09-09 at 13.35.43.png

とりあえず15以上でやってみました。

新規プロジェクトの設定

Screen Shot 2015-09-09 at 13.35.54.png

Aciton Bar Tabs with ViewPager な Activity を作ってもらいます。

Screen Shot 2015-09-09 at 13.37.18.png

Screen Shot 2015-09-09 at 13.38.55.png

プロジェクトをビルドします。

Screen Shot 2015-09-09 at 13.39.01.png

Screen Shot 2015-09-09 at 13.41.17.png

確認

ビルドが終わってAndroid Studioが起きて、実装できるようになったら、Runしてみました。

Screen Shot 2015-09-10 at 17.02.01.png

(画像ではアプリ名がデフォルトから変更されています)

とりあえず表示されました!
今日はここまで

4日目

  • 内容: タブメニューを変更してみる
  • 時間:
MainActivity.java
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を調整する

res/values/strings.xml
    <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>

Screen Shot 2015-09-10 at 16.59.22.png

5日目

  • 内容: option menuを追加してみる
  • 時間:

AndroidのtabとiOSのtabがだいぶ違うことにやっと気づいたので、方針転換。
とりあえず、なんとかoption menuを追加してみる。

fooとbarのiconは常に表示させて、settingはスペースがある場合のみ表示という感じでいきたい。

menu_main.xml
<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は割愛。

MainActivity.java
    @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);
        }
    }

Screen Shot 2015-09-19 at 22.44.03.png

settingが消えるのも確認しました。

Screen Shot 2015-09-19 at 23.04.07.png

iconをタップすると次のActivityが立ち上がるようにする

  1. Activity(例、FooActivity)をつくります
  2. intentを渡します
MainActivity
    @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);
    }

とりあえず実現はできました。

=================================================

References

Android Studio

UI

Realm

ActionBar

Menu

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12