投稿

8月, 2018の投稿を表示しています

【Android】Fragmentを使う① - 単純なFragmentの実装 -

イメージ
FragmentはActivityに設置するViewを機能ごとに小分けして、元来Activityに集中しがちだったロジックを細分化する方法です。 複数人で開発しているときはコンフリクトがおきにくいのでかなり便利です。 今回はFragmentの単純な例を実装してみました。 画面構成 画面の構成としてはMainActivityの下に、2つのFragmentが紐付いている状態です。 2つのFragmentはそれぞれのレイアウト構成ファイルを読み込んでいます。 実装 ライブラリの追加 app/build.gradle annotationProcessor "org.androidannotations:androidannotations:+" implementation "org.androidannotations:androidannotations-api:+" レイアウトファイル layout/fragment_main1.xml Fragment1で使用するレイアウトを定義します。 ここではTextView、EditText、Buttonの3つのViewを設置しています。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffa" android:padding="5dp" android:orientation="vertical"> <TextView android:id=&quo

【Android】Viewの装飾

イメージ
TextViewやEditTextをはじめとするViewクラスを継承する多くのViewは、様々な装飾をすることが可能です。 個人アプリは特にシンプルなUIになりがちですが、こうした装飾をすることで見た目が一気にグレードアップします。 ここではいくつかそのサンプルを上げておきます。 実装 装飾を定義したファイルの準備 drawble/view_frame.xml 方法としては、drawble配下に装飾用の定義を記述したxmlファイルを用意しておき、Viewのバックグラウンドに指定します。 xmlファイルを追加は、プロジェクトメニューの drawbleを右クリック → New → File で追加します。 ファイル名は任意で、view_frame.xmlとした場合、適用したいViewのbackground属性に以下のように設定します。 android:background="@drawble/view_frame" 装飾定義ファイルには、shapeタグとその子要素によって記述します。 どのように記述していくのかを以下に記載していきます。 枠線をつける drawble/view_frame.xml まずはシンプルに枠線をつけてみます。特にデフォルトのEditTextは枠線がなく、明るい画面にデフォルトのEditTextだと入力欄であることが気づきにくいという難点があるので枠線は必須だと個人的に思ってます。 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="2dp" android:color="#232323" /> </shape> strokeタグでEditTextに枠線をつけます。 widthで線の幅、colorで色を指定できます。 背景色をつける drawble/view_frame.xml これもよく使います。EditTextでは特に淡

【Java】マルチバイトを含んだ文字列を指定バイト数で切る

マルチバイトを含んだ文字列を指定バイト数で切って、切った場合に三点リーダを付与する関数を作りました。半端な場合(マルチバイト文字の途中で切れる)は、その文字ごと切り捨てます。 方法としては文字列を一文字ずつ取り出して、それがシングルバイトなのかマルチバイトなのかを判定します。 判定はStringクラスの getBytes(StandardCharsets.UTF_8).length が1ならシングルバイトとしています。 なお三点リーダも文字列と考慮するので、マルチバイト一文字分を含めても切る必要がない場合は何もしないものとします。 実装 共通クラス StringUtils.java staticメソッドで定義しました。これをコピってそのまま使えます。 public class StringUtils { /** * 文字列を指定バイト数で切って、切った場合三点リーダを付与する * @param value * @param byteLength * @return */ public static String truncate(String value, int byteLength) { if(value == null) { return null; } if(getByte(value) <= byteLength + 2) { return value; } String ret = ""; int b = 0; for(int i = 0; i < value.length(); i++) { String target = value.substring(i, i + 1); if(target.getBytes(StandardCharsets.UTF_8).length == 1) { b++; } else{ b += 2;

【Android】全面広告を表示する

イメージ
無料アプリの収益化で利用するAdMob広告において、全面に表示される Interstitial型広告についての実装です。 この広告はバナー型より収益が見込めますが、あまり頻繁に表示されるとユーザーにとってあまり印象がよくありません。そのため起動時、3回に1回の頻度等に制限するのがベターです。 また、バナー型に比べて広告の読み込み処理に時間がかかるのと、画面全体に表示されるため、いきなり出てきた場合ユーザーの誤クリックを招いてしまいます。そのため広告のローディング中はプログレスダイアログを出して操作不可にしておく処理を入れておくと良いです。プログレスダイアログに関しては以下の記事にまとめています。 WebViewのロード完了までプログレスダイアログを表示する 事前準備として、広告タイプがインタースティシャル型の、adUnitIdを発行します。※adUnitIdの発行については以下をご確認ください。 Androidアプリでバナー型広告を表示する 実装 ライブラリの追加 app/build.gradle まずはバナー型と同様、以下のライブラリをdependenciesに追加します。 compile 'com.google.android.gms:play-services:+' 権限の追加 AndroidManifest.xml こちらもバナー型と同様です。 <uses-permission android:name="android.permission.INTERNET" /> 広告IDの設定 values/string.xml インタースティシャル型で発行したadUnitIdを定義します。 <string name="interstitial_ad_unit_id">ca-app-pub-3940256099942544/1033173712</string> 全面広告のインスタンス取得 これは広告のインスタンス取得をメソッドにしたものです。メインスレッドで呼び出します。 /** * 全面広告のインスタンスを取得 * @return InterstitialAd */ private InterstitialAd new