残念な子の覚書 -2ページ目

残念な子の覚書

忘れないように日々書いていこうと思います。

せっかくスクロール​できるのに、スクロールバーが小さすぎてあまり意味が無い場面が多いです。
そんな時は自分でバーを作っちゃいましょう。


レイアウトファイルでScrollViewにスクロールバーのxmlを読込みます。
↓こんな感じ
android:scrollbarThumbVertical="@drawable/scrollber"


で、バー自体はxmlに記述します。
↓こんな感じ
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50sp">

<gradient android:startColor="#808080"
android:endColor="#808080"


android:angle="0"/>

<corners android:radius="6dp"
/>

</shape>


意外と簡単ですね。 


android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

このエラーが出力されてたら、UIスレッドに干渉してしまってます。
たとえば、スレッド内からダイアログ表示、TextViewの内容変更等々。。。

けっこうやってしまうのではないでしょーか?
お気を付け下さい。

android.util.Log.d("aaa", str);
とかでstrの中身が見たいからログに出してみようとしても出ないときの話です。

実はメッセージが空文字だとLogは出力されないんです。
ちょっとしたマメ知識として。。。
ループで文字列を延々と連結したり、長い文字列を追加したりするときは
String型の変数を使うより、StringBufferクラスを使用した方が格段に早くなります。

Androidでは特に顕著ですね。

解像度の大きいエミュレータになるとボタンが表示されないので、
キーボードから操作する必要があります。

下記に乗せておきます。

Emulator Key Keyboard Key
BACK ESC
Menu F2
CALL F3
ENDCALL F4
SERCH F5
Power button F7
Disable/enable all networking F8
Start tracing F9 (only with -trace flag)
Stop tracing F10 (only with -trace flag)
Home HOME
DPad left/up/right/down Keypad 4/8/6/2
DPad center click Keypad 5
Volume down Keypad minus sign (-)
Volume up Keypad plus sign (+)

探してみると大きく4つあったので、忘れないよう書いときます。

1.finish()
 Activityの終了時に推奨される終了方法。
 Activityをライフサイクルの通りに終わらしてくれる。
 が!「終わってもいいよ」という命令になるので、場合によっては残り続けることも。
 マニフェストでactivity android:noHistory=”true”をしておくと即終了となるらしい。
 
2.moveTaskToBack(true)
 アプリケーションの終了時に推奨される終了方法。
 終了とはいうものの、その名の通りタスクが後ろに回るだけです。
 メモリ領域がキツくなってきたらonDestroyが呼ばれて破棄されます。
 
3.System.exit(RESULT_OK)
 推奨されません。
 VMを停止してプロセスを殺しますが、
 ネイティブのVMなので危険性が高いです。
 
4.android.os.Process.killProcess(android.os.Process.myPid())
 プロセスを強制的に終了します。
 ライフサイクルを無視するので、通常はfinish()を使うように推奨されていあmす。
 

これを見ていると、終了時はオブジェクトの解放などをしっかりと行うことがベターだと思います。
参考サイト:http://www.ecoop.net/memo/archives/2011-01-24-1.html
AndroidでPing投げて~と考えた時に参考にどうぞ。

/**
* adb shell で実行可能なping コマンドを実行することでネットワークの疎通確認を行います
*
* @return 接続可能ならtrue, 不可能ならfalse
*/
public static boolean ping(){
Runtime runtime = Runtime.getRuntime();
Process proc = null;
try{
proc = runtime.exec("ping -c 5 www.google.com");
proc.waitFor();
}catch(Exception e){}
int exitVal = proc.exitValue();
if(exitVal == 0)return true;
else return false;
}

 AndroidでのVisibleはboolean型で指定しません。
true/falseではなく、visible/invisible/goneの三種類があります。
この3つの違いは何かというと…
1,visible
 visible=trueと同義。
 表示させる場合に使用。デフォルトはこれですね。
 
2,invisible
 表示しなくなりますが、存在は残すので
 ウィジットがあった場所は空白のまま残ります。
 「見えないけど消えてるだけでそこにはある」
 
3,gone
 visible=falseと同義。
 完全に消失します。
 ウィジットがあった場所は詰められるので、
 痕跡が残りません。
 
ちなみに通常使用する時はこんな感じ↓

txtTEST.setVisibility(View.GONE);

せっかくスクロール​できるのに、スクロールバーが小さすぎてあまり意味が無い場面が多いです。
そんな時は自分でバーを作っちゃいましょう。

レイアウトファイルでScrollViewにスクロールバーのxmlを読込みます。
↓こんな感じ
android:scrollbarThumbVertical="@drawable/scrollber"

で、バー自体はxmlに記述します。
↓こんな感じ
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50sp">
<gradient android:startColor="#808080" android:endColor="#808080"
android:angle="0"/>
<corners android:radius="6dp" />
</shape>

意外と簡単ですね。

txt = (TextView) findViewById(R.id.txt);
とかでこの最後のR.id.txtの部分がエラーになる。クリーンしても治らない!という事があったので書いときます。

原因はレイアウトのXMLにエラーがある事が多いです。
クリーンした時にR.javaが作成されますが、
その時にエラーがあれば作成されないので、R.javaが無くなってしまう為です。