All Your Baseの日記

モバイルアプリを開発しています。

「Androidアプリ開発超入門」始めました

f:id:ayb:20171104081054j:plain

「Androidアプリ開発超入門」というブログを書き始めました。Androidアプリ開発に入門したいという人向けの記事を書いていこうと思っています。

android.rocketapps.jp

これまでに書いた記事は2つで、どちらもそこそこ気合の入った記事になっています。読んでいただけると嬉しいです。ButterKnifeの使い方とGitHubの使い方の記事です。

android.rocketapps.jp

android.rocketapps.jp

なんでこういうブログを書き始めたのかというと、自分がAndroidアプリ開発に入門した時に誰かに教えて欲しかったことをまとめておきたいという気持ちがあるからなのですね。

それは例えばライブラリの使い方であったりGitHubの使い方であったりするわけですが、初心者のうちは何を勉強したらいいのかもわからないようなことが多いと思うのです。そこをうまくサポートしてあげることができたらいいなーという気持ちで始めました。

もちろん、アクセスが増えてマネタイズできればいいなーとも思っていますが、Androidアプリ開発というニッチな分野だといろいろと難しいですね。本ブログの読者の皆様におかれましては、ご支援、よろしくお願いいたします。

【Android】Realmを導入する

f:id:ayb:20171031220447j:plain

Android StudioのプロジェクトにRealmを追加する方法をメモ。

最新バージョンはここでチェックしましょう。

realm.io

プロジェクトレベルのbuild.gradleのrepositoriesとdependenciesに追加。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:4.1.1"
    }
}

アプリレベルのbuild.gradleの上の方に追加。どのくらい上かというと、1番上です。他に apply plugin の記述がしてあればその下にでも書いておきましょう。

apply plugin: 'realm-android'

以上です。

【Android】RecyclerViewで1項目1画面使ってViewPagerみたいにする

f:id:ayb:20171029124726j:plain

AndroidのRecyclerViewを1項目1画面使ってViewPagerみたいに使いたかったんですが、RecyclerViewPagerというライブラリを使ったら一発でいけました。

github.com

使い方は簡単です。まずはapp/build.gradleに2箇所追加してSyncします。

android {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

dependencies {
    //RecyclerViewPager
    compile 'com.github.lsjwzh.RecyclerViewPager:lib:v1.1.2@aar'
}

あとはRecyclerViewの代わりにRecyclerViewPagerを使えばOKです。

<com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

【Android】CircleImageViewで画像を丸く切り抜く

f:id:ayb:20171029125651j:plain

Androidで画像を丸く切り抜きたい時に便利なのが、「CircleImageView」というライブラリです。使い方も簡単なので、ちょっと紹介してみます。

まずは導入ですが、app/build.gradleに1行書いて、SyncしたらプロジェクトにCirleImageViewが追加されます。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'

    //追加
    compile 'de.hdodenhof:circleimageview:2.1.0'
}

あとはImageViewをCircleImageViewに置き換えるだけです。support.v4.widget.CircleImageViewというのもあるんですけど、これは使えないです。間違えないように気をつけましょう。

<de.hdodenhof.circleimageview.CircleImageView
    android:src="@drawable/sample"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

circleimageviewで画像を丸く切り抜く

これだけで画像を丸く切り抜くことができました。

【Kotlin】アプリの初回起動を判定する

f:id:ayb:20171028110130j:plain

Androidアプリの初回起動を判定する方法。SharedPreferencesを使う方法は知ってたけど、今はもっと簡単な方法がありました。Support Library v4に実装されているAppLaunchCheckerを使うと良いみたいです。

以下の記事のコードをそのままKotlinに置き換えてみました。

blog.techium.jp

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    if (AppLaunchChecker.hasStartedFromLauncher(this)) {
        //2回目以降
        Log.i("AppLaunchChecker", "hello, again")
    } else {
        //初回起動時
        Log.i("AppLaunchChecker", "hello, world")
    }

    AppLaunchChecker.onActivityCreate(this)
}

簡単ですね!

【Android】drawableの一部のみ角丸にする

f:id:ayb:20171027223525j:plain

drawableの一部のみ角丸にしたい時ってありますよね?私はありました。 cornerstopLeftRadius やら bottomRightRadius やらを指定してあげると、一部のみ角丸にしてくれます。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:shape="rectangle" >
            <solid
                android:color="@color/textBackgroundRight" >
            </solid>
            <corners
                android:topLeftRadius="16dp"
                android:topRightRadius="16dp"
                android:bottomLeftRadius="16dp"/>
        </shape>
    </item>
</layer-list>

こんな感じでできました。簡単に吹き出しみたいなレイアウトを作れて便利です。

f:id:ayb:20171027223448p:plain

電車で分厚い技術書を読むのは無理だ

f:id:ayb:20171026222458j:plain

通勤時間が長いので、電車の中でスキルアップに励もうと思い分厚い技術書を持ち歩いているんですけど、電車で読むのは無理であることに遅ればせながら気付きました。

立って読むと持ってる手がすごく疲れてすぐに読む気が無くなるし、座っていても窮屈すぎてストレス溜まってすぐに読む気がなくなります。元から読む気がないとかじゃなくて、電車で分厚い参考書を読むのがそもそも物理的に無理なのだと思います。

少なくとも自分には無理です。

タブレット端末を買った

ところで、ちょっと前に中古のAndroidのタブレットを買いました。SonyのExperia Z2(SO-05F)です。古い端末ですけどいい感じに動いています。

タブレット端末を買ったのは、Kindleをはじめとする電子書籍を読むための端末が欲しかったから、ということに尽きます。実際、タブレット端末を使うと前述の分厚い技術書問題がなくなっていい感じです。

今まで使っていたKindle paperwhiteだと技術書を読むがつらかったので技術書は紙の本を買っていたんですが、普通のタブレット端末に変えてからはKindle本などの電子書籍を買うようになりました。

Kindle本だと、紙より電子版の方が安いことが多いのも良い点です。このためだけに、もっと早くタブレット端末を買っておいても良かったと思いました。計算してないですが、書籍代の節約分で端末代はすぐにペイできていたのではないかと思います。

なんだかまとまらないですが、眠いのでこの辺で失礼します。

【Android】Calligraphyでカスタムフォントを設定する

f:id:ayb:20171022195730j:plain

AndroidでCalligraphyというライブラリを使ってカスタムフォントを簡単に設定する方法をメモしておきます。詳しい使い方は公式を参照してください(英語)。

github.com

Calligraphyの導入

app/build.gradle にCalligraphyを追加して、Syncします。Calligraphyの最新バージョンはGitHubのリポジトリを確認します。

dependencies {
    compile 'uk.co.chrisjenx:calligraphy:2.3.0'
}

assetsフォルダにフォントファイルを配置

assetsフォルダにフォントファイルを配置します。assetsフォルダがなければ、右クリックして作ります(下記画像参照)。assetsフォルダができたら、assetsフォルダの上でフォントファイルをペーストすればOKですね。

f:id:ayb:20171022194950p:plain

Calligraphyの初期化

ApplicationクラスあたりでCalligraphyの初期化を行います。マニフェストのApplicationの設定を忘れずにしておきましょう。

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("PixelMplus10-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build()
        );
    }
}

Activityにアタッチ。

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

カスタムフォントを適用できました。

f:id:ayb:20171022195601p:plain

「Reactive Programming on Android with RxJava」を読んだ

f:id:ayb:20171008102030j:plain

「Reactive Programming on Android with RxJava」を読みました。英語ですけど、リアクティブプログラミングについてわかりやすく書いてあって良かったです。内容もAndroid向けでいい感じでした。

Reactive Programming on Android with RxJava (English Edition)

Reactive Programming on Android with RxJava (English Edition)

目次

  • RxJavaの基礎
    • リアクティブプログラミングとは
    • RxJavaのコアコンポーネント
    • オペレーター
    • マルチスレッド
  • RxJavaの応用
    • Androidにおけるリアクティブモデリング
    • バックプレッシャー
    • エラーハンドリング

内容についてはご自身の目でお確かめください。