アプリ作って海外移住

コピペプログラマーのメモ

スプラッシュ画面挿入

    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

親となるテーマのActionBarの有無は用途によって変えてください。
重要なのは android:windowBackground属性にdrawableを指定していることです。

background_splashは次のように設定しています。

  • background_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">

    <item
        android:drawable="@color/colorPrimaryDark"/>

    <item
        android:gravity="center">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>
    <item
        android:gravity="bottom"
        android:bottom="@dimen/large_margin">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

layer-listで作成します。

文字は追加できないのですが、Verctor画像で文字を作れば設定できます
その場合はstyleをv21以降と以前で分ける必要があります。

起動するActivityに作成したテーマを設定します。

  • AndroidManifest.xml
        ...
        <activity
            android:name=".SplashActivity"
            android:label="SplashCold"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        ...

Splash専用のActivityを追加しなくても、スプラッシュが追加できています!

github からandroidstudioにダウンロード  Gradle location is incorrect

Gradle location is incorrect  エラーがでたら、gradleそのものを指定する

f:id:mmiimmiix:20161018111824p:plain

 

 

 

AndroidStudio の最初のメニューから、

 

Check out project from version control

GitHubを選ぶ

URLをdrop&drag 

 

 

f:id:mmiimmiix:20161018112207p:plain

 

f:id:mmiimmiix:20161018111929p:plain

CLONE

YES

Gradle location を設定  注意 

Finish

 

AndroidStudioで使うとき、

File→ Open で見れないとき。

File → New→ ImportProject  でインポートして使えるようになる。

 

Google Maps API key 取得  デバッグ用 リリース用 API key 取得

1 デバッグAPI key 取得

 

SHA-1 フィンガープリント取得

C:\Program Files\Java\jdk1.8.0_25\bin>

 

 

C:\Program Files\Java\jdk1.8.0_25\bin に移動 そこで、keytool が使える。

keytool -list -v -keystore "C:¥Users¥mura¥.android¥debug.keystore" -alias androiddebugkey -storepass android -keypass android"

これで、OK

API Managerに移動

Google API Console

  1. Google Developers Console に移動します。
  2. プロジェクトを選択します。
  3. 左のサイドバーで、[API·と認証] を選択します。

     

    API のリストで、使用しているすべての API のステータスが [有効] の表示になっていることを確認してください。 必要な APIGoogle Places API for Android のみですが、同じプロジェクトで別の API を選択して有効にすることもできます。
  4. 左のサイドバーで、[認証情報] を選択します。

Android API キーを取得する

上記の手順を実行して API をアクティベートした後、Google Developers Console の資格情報ページが開きます。このページではプロジェクトの API キーや他の資格情報にアクセスできます。

  1. プロジェクトにまだ Android アプリケーション用キーがない場合は、[新しいキーを作成] ボタン、[Android キー] の順に選択して API キーを作成します。
  2. 表示されるダイアログで、アプリの SHA-1 フィンガープリント、セミコロン(;)、アプリのパッケージ名の順に入力します。次に例を示します。

    BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75;com.example.android.mapexample
  3. 次のように、Google Developers Console によって Key for Android applications というタイトルのセクションが表示され、次に 40 文字のAPI キーが表示されます。

    AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

API キーを取得したら、スタートガイドで説明されているとおり、それをアプリのマニフェストに追加します。

 

2 リリース用 API key 取得

Androidstudio のkeystore はjksになったので、上記とは違い、APKからフィンガープリントを取得する。

C:\Program Files\Java\jdk1.8.0_25\bin>

keytool -list -printcert -jarfile C:\Users\mura\StudioProjects\Memo201f3\app\app-release.apk

 

そして、デバッグ同様新たにAPIキー作成をおこなう。

新しく取得したAPIキーで、MANUFEST 修正、再度APK作成、リリース

 

 

 

 

launchMode="standard"

 

Activity A まにゅフェスト
launchMode="standard"

 

Activity BからActivityAへインテント


finish();

/* Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("sharedText", sharedText);

startActivity(intent);*/

// ⑦アクティビティを再開させる
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("sharedText", sharedText);
startActivity(intent);:

 

Intent.FLAG_ACTIVITY_CLEAR_TOP

実行してたらクリアして最初から という意味。

なので、intent が違う内容でも受け取れる。

oncreatekから始まるから

 

onNewIntent(Intent intent)が思うように動かない。

 

ホームボタンが押された時終了。

たったこれだけが大発見
@Override
public void onUserLeaveHint(){
//ホームボタンが押された時や、他のアプリが起動した時に呼ばれる
//戻るボタンが押された場合には呼ばれない
finish();
// Toast.makeText(getApplicationContext(), "Good bye!" , Toast.LENGTH_SHORT).show();
}




-----------------------------
暗黙インテント受け取り時、アプリが終了状態なら、
getAction()が受け取れるが、
アプリ起動中、ホームボタン押されて、ブラウザから、intent
されたとき、
getAction()が受け取れない、しかも、onresumeから始まる

よって、ホームボタンが押されたとき、一度しゅうりょうして、次回起動時にoncreateから始まり、getactionが受け取れるようになった。

fragment 下のリスナーが透けて有効になる件。

////////下のリスナー無効
////////////////////////全体にクリックリスナーして、無効にする。
LinearLayout lenear_all = (LinearLayout)view.findViewById(R.id.linear_all);
lenear_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});


-------------------------------------------------
透けるのを利用して、メニューボタンなど子fragmentでもoya eventとして扱える。
kofragment 参照

notify使い分け       adapter.notifyItemRemoved(position); apter.notifyItemRangeChanged

//////////////////////////////////ミソ-------------------------
removw時 セットで使う。
  adapter.notifyItemRemoved(position);
adapter.notifyItemRangeChanged(position, getItemCount());
onswaipe 時
adapter.notifyItemChanged(pos);
これでアニメもつく。





view.tv_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!CommonUtils.isClickEvent()) return;
list3Ko.remove(position);
adapter.notifyItemRemoved(position);
int h = getItemCount();
adapter.notifyItemRangeChanged(position, getItemCount());

//adapter.notifyDataSetChanged();

}
});
view.tv_undo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!CommonUtils.isClickEvent()) return;
/* int w1 = list3Ko.get(position).getItem1();
String w2 = list3Ko.get(position).getItem2();
String w3 = list3Ko.get(position).getItem3();
String w4 = list3Ko.get(position).getItem4();
String w5 = list3Ko.get(position).getItem5();
String w6 = list3Ko.get(position).getItem6();
Uri w7 = list3Ko.get(position).getItem7();
Bitmap w8 = list3Ko.get(position).getItem8();
*/
list3Ko.get(position).set10FlgUndo("0");


adapter.notifyItemChanged(position);

//adapter.notifyDataSetChanged();

}
});