Androidアプリケーションの開発を勉強中。
No.14
2012/03/13 (Tue) 15:07:15
ViewFlipperの自動スクロールが、ある特定の状況で動かない件についてメモ。
ある特定の状況とは、端末を操作せずに放置して、画面が暗くなってからすぐに復帰させた場合。およそ10秒以内。
ロック解除の画面が表示されず、画面消灯前の画面がすぐに表示されますよね。
あの時です。
そうすると、ViewFlipperの自動スクロールが動かなくなるんですよ。
onResumeでstartFlippingしてるにも関わらず。
onResumeはきちんと通過してるんですが。
画面タップやらボタンクリックやらでもstartFlippingするようにしていますが、それも動かない。
ですが、放置→画面消灯後に、ロック解除画面を経て復帰させた場合は動くんですよ。
あと、この症状が発生しても、ロック解除画面を経て復帰させれば直るんですよ。
目下調査中。
ある特定の状況とは、端末を操作せずに放置して、画面が暗くなってからすぐに復帰させた場合。およそ10秒以内。
ロック解除の画面が表示されず、画面消灯前の画面がすぐに表示されますよね。
あの時です。
そうすると、ViewFlipperの自動スクロールが動かなくなるんですよ。
onResumeでstartFlippingしてるにも関わらず。
onResumeはきちんと通過してるんですが。
画面タップやらボタンクリックやらでもstartFlippingするようにしていますが、それも動かない。
ですが、放置→画面消灯後に、ロック解除画面を経て復帰させた場合は動くんですよ。
あと、この症状が発生しても、ロック解除画面を経て復帰させれば直るんですよ。
目下調査中。
PR
No.13
2012/01/08 (Sun) 17:15:11
久しぶりの更新で、いきなりのアプリ公開。
エントリーしている企業を管理するアプリです。
企業名、業種、職種、勤務地、エントリーした就活サイト(リクナビとか)、ID、パスワードを管理できます。
ダウンロードはこちら。
私のIS05ではちゃんとapkファイルとして認識されました。ブラウザはドルフィンです。
もしダウンロード時にapkファイルとして認識されないようなら、保存名を付ける時に拡張子を「.apk」にして保存し、インストールしてください。
あ、あと野良アプリなので、「設定」→「アプリケーション設定」→「提供元不明のアプリ」にチェックを付けてください。
初回起動時には真っ暗な画面という不親切設計です。
使い方は以下の通り。
【使い方】
1.起動したら、まず設定を行います。メニューボタン→「設定」を選びます。
2.自分がよく入力する業種、職種、勤務地、登録サイトをそれぞれ設定できます。
設定したい項目をタップします。
3.これまた真っ暗な画面になります。メニューボタン→「新規追加」を選びます。
表示されるダイアログに、自分がよく入力する業種名などを入力してOKをクリックします。
登録サイトの場合、URLも登録しておくことができます。
4.全部設定できたら、一番最初の真っ暗な画面へ戻り、メニューボタン→「新規追加」から企業情報を登録します。登録画面で、先ほど設定した業種や職種が選択できるようになっています。
登録サイトを選択するとURLを連動して自動入力しますが、このURLを編集して登録できます。
企業毎のマイページなんかがある場合、「マイページ」って名前で様々なURLを登録しておきたいので・・・。
大体こんな感じです。
質問、ご意見等ありましたら、この記事のコメントかツイッターでお願いします。
それと、いちいち入力なんて面倒と思う方もいると思うので、カンマ区切りのcsvファイルを読み込めるようにしています。
csvファイルを作成し、アンドロイドの端末へ入れて、メニューボタン→「ファイル読み込み」から読み込めます。
でもcsvファイル作成するのも割と面倒です。
csvファイルの作成方法については「続きを読む」に記載しておきます。
エントリーしている企業を管理するアプリです。
企業名、業種、職種、勤務地、エントリーした就活サイト(リクナビとか)、ID、パスワードを管理できます。
ダウンロードはこちら。
私のIS05ではちゃんとapkファイルとして認識されました。ブラウザはドルフィンです。
もしダウンロード時にapkファイルとして認識されないようなら、保存名を付ける時に拡張子を「.apk」にして保存し、インストールしてください。
あ、あと野良アプリなので、「設定」→「アプリケーション設定」→「提供元不明のアプリ」にチェックを付けてください。
初回起動時には真っ暗な画面という不親切設計です。
使い方は以下の通り。
【使い方】
1.起動したら、まず設定を行います。メニューボタン→「設定」を選びます。
2.自分がよく入力する業種、職種、勤務地、登録サイトをそれぞれ設定できます。
設定したい項目をタップします。
3.これまた真っ暗な画面になります。メニューボタン→「新規追加」を選びます。
表示されるダイアログに、自分がよく入力する業種名などを入力してOKをクリックします。
登録サイトの場合、URLも登録しておくことができます。
4.全部設定できたら、一番最初の真っ暗な画面へ戻り、メニューボタン→「新規追加」から企業情報を登録します。登録画面で、先ほど設定した業種や職種が選択できるようになっています。
登録サイトを選択するとURLを連動して自動入力しますが、このURLを編集して登録できます。
企業毎のマイページなんかがある場合、「マイページ」って名前で様々なURLを登録しておきたいので・・・。
大体こんな感じです。
質問、ご意見等ありましたら、この記事のコメントかツイッターでお願いします。
それと、いちいち入力なんて面倒と思う方もいると思うので、カンマ区切りのcsvファイルを読み込めるようにしています。
csvファイルを作成し、アンドロイドの端末へ入れて、メニューボタン→「ファイル読み込み」から読み込めます。
でもcsvファイル作成するのも割と面倒です。
csvファイルの作成方法については「続きを読む」に記載しておきます。
No.12
2011/06/08 (Wed) 02:28:33
以前どうやればいいんだーってなってたのが解決したので。
画面の高さ-キーボードの高さとか言ってたけどそんなことしなくてもよかった。
色々調べてたら、AndroidManifest.xmlの方に記述する「adjustPan」と「adjustResize」というものを発見。
Y.A.Mの雑記帳 Android Onscreen Input Methods
こちらに詳しく書いてあります。
こちらのブログにはほんとお世話になります……。
なんとなく私がやりたいことはadjustPanっぽいなあ。
……でもここにあるadjustResizeの2つ目の例の方がそれっぽいような気も……?
とりあえず、上のブログにあるサンプルを動かしてみた。
するとadujustPanは期待した動きをしてくれない。
うーん?
そしてadjustResizeの方はブログに書いてある通りに動く。
うーん。しかし私がやりたいことはそういう動きではないんですよね……。
色々悩んでいましたがはっと気づきました。
ここのサンプルでandroid:layout_weight="1"を設定したテキストボックスが、adjustResizeでサイズが変わっている……。
ということは、全体をスクロールビューに入れて、スクロールビューにandroid:layout_weight="1"を設定したらどうだろう。
これが正解でした。
ではサンプル。
そしてAndroidManifest.xmlのアクティビティタグの中に、
android:windowSoftInputMode="adjustResize"
をいれます。
するとこんな感じになります
キーボードが出てくるとスクロールビューのサイズが変わって、全体がスクロールするようになりました。
下部にあるボタンを常に表示させたい場合は、スクロールビューの中からボタンを出して、全体をさらにLinearLayoutでくくってあげればOKです。
こんな感じになります。
このサンプルのように、キーボードが出ていない時にスクロールビュー外にあるUIをスクロールビューのすぐ下に配置したい場合は、全体をくくっているLainearLayoutのandroid:layout_heightをwrap_contentにすればできます。
スクロールビュー外のUIを画面の1番下にもっていきたい場合はfill_parentにすればいいわけですね。
……なんだかうまく説明できていないような気もする。
ちなみに、スクロールビュー内のUIにandroid:layout_weightを使っても、残り余白いっぱいに広がってくれませんでした。
なので上の方法で、かつ中のUIにlayout_weightを使いたい場合どうすればいいのかはわかりません……。
画面の高さ-キーボードの高さとか言ってたけどそんなことしなくてもよかった。
色々調べてたら、AndroidManifest.xmlの方に記述する「adjustPan」と「adjustResize」というものを発見。
Y.A.Mの雑記帳 Android Onscreen Input Methods
こちらに詳しく書いてあります。
こちらのブログにはほんとお世話になります……。
なんとなく私がやりたいことはadjustPanっぽいなあ。
……でもここにあるadjustResizeの2つ目の例の方がそれっぽいような気も……?
とりあえず、上のブログにあるサンプルを動かしてみた。
するとadujustPanは期待した動きをしてくれない。
うーん?
そしてadjustResizeの方はブログに書いてある通りに動く。
うーん。しかし私がやりたいことはそういう動きではないんですよね……。
色々悩んでいましたがはっと気づきました。
ここのサンプルでandroid:layout_weight="1"を設定したテキストボックスが、adjustResizeでサイズが変わっている……。
ということは、全体をスクロールビューに入れて、スクロールビューにandroid:layout_weight="1"を設定したらどうだろう。
これが正解でした。
ではサンプル。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="100dip"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="200dip"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="OK"
/>
</LinearLayout>
</ScrollView>
そしてAndroidManifest.xmlのアクティビティタグの中に、
android:windowSoftInputMode="adjustResize"
をいれます。
するとこんな感じになります
キーボードが出てくるとスクロールビューのサイズが変わって、全体がスクロールするようになりました。
下部にあるボタンを常に表示させたい場合は、スクロールビューの中からボタンを出して、全体をさらにLinearLayoutでくくってあげればOKです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="100dip"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="200dip"
/>
</LinearLayout>
</ScrollView>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="OK"
/>
</LinearLayout>
こんな感じになります。
このサンプルのように、キーボードが出ていない時にスクロールビュー外にあるUIをスクロールビューのすぐ下に配置したい場合は、全体をくくっているLainearLayoutのandroid:layout_heightをwrap_contentにすればできます。
スクロールビュー外のUIを画面の1番下にもっていきたい場合はfill_parentにすればいいわけですね。
……なんだかうまく説明できていないような気もする。
ちなみに、スクロールビュー内のUIにandroid:layout_weightを使っても、残り余白いっぱいに広がってくれませんでした。
なので上の方法で、かつ中のUIにlayout_weightを使いたい場合どうすればいいのかはわかりません……。
No.11
2011/05/29 (Sun) 00:41:44
ソース晒しつつ、今回の成果でも。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <Button android:id="@+id/button1" android:layout_width="150dip" android:layout_height="wrap_content" android:onClick="mixiAuthentic" android:text="mixi認証" /> <Button android:id="@+id/button2" android:layout_width="150dip" android:layout_height="wrap_content" android:onClick="AuthDestroy" android:text="認証解除" /> </LinearLayout>
package net.edo.hrio.mixiclient; import jp.mixi.android.sdk.*; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.*; public class mixiClient extends Activity { private MixiContainer container; private int AUTHORIZE_REQUEST_CODE; private TextView text; private Button button1; private Button button2; private boolean Auth; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView)findViewById(R.id.text1); button1 = (Button)findViewById(R.id.button1); button2 = (Button)findViewById(R.id.button2); Config config = new Config(); config.clientId = "APIキー"; config.selector = Config.GRAPH_API; container = MixiContainerFactory.getContainer(config); //container.init(this); //ここ! /*Auth = container.isAuthorized(); */ Auth = false; ButtonClickSet(Auth); } public void mixiAuthentic(View view){ container.authorize(mixiClient.this, new String[]{"r_profile", "w_voice"}, AUTHORIZE_REQUEST_CODE, new CallbackListener(){ @Override public void onComplete(Bundle values) { // 正常時の処理 Toast.makeText(getBaseContext(), "認証しました", Toast.LENGTH_LONG).show(); Auth = true; ButtonClickSet(Auth); } @Override public void onCancel() { // ユーザキャンセル時の処理 Toast.makeText(getBaseContext(), "キャンセルしました", Toast.LENGTH_LONG).show(); } @Override public void onFatal(ErrorInfo e) { // 異常終了時の処理 Toast.makeText(getBaseContext(), "異常終了しました", Toast.LENGTH_LONG).show(); } @Override public void onError(ErrorInfo e) { // エラー Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } } ); } public void AuthDestroy(View view){ container.logout(this, AUTHORIZE_REQUEST_CODE, new CallbackListener(){ @Override public void onComplete(Bundle values) { Toast.makeText(getBaseContext(), "認証解除しました", Toast.LENGTH_LONG).show(); Auth = false; ButtonClickSet(Auth); } @Override public void onCancel() { // ユーザキャンセル時の処理 Toast.makeText(getBaseContext(), "キャンセルしました", Toast.LENGTH_LONG).show(); } @Override public void onFatal(ErrorInfo e) { // 異常終了時の処理 Toast.makeText(getBaseContext(), "異常終了しました", Toast.LENGTH_LONG).show(); } @Override public void onError(ErrorInfo e) { // エラー Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } }); } public void ButtonClickSet(boolean a){ if(a){ text.setText("認証済みです"); button1.setClickable(false); button2.setClickable(true); }else{ text.setText("未認証です"); button1.setClickable(true); button2.setClickable(false); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); container.authorizeCallback(requestCode, resultCode, data); } @Override public void onDestroy(){ container.close(this); super.onDestroy(); } }
xmlファイルとjavaのソース自体はこんな感じになってます。
そしてjavaのソースの中で「ここ!」とコメント入れているところ。
どうもこの行があると、「エラーが発生しました云々」が表示されるようです。なので今現在はコメントアウトしております。
ちなみにこの状態でボタンを押してやると「異常終了しました」が表示されます。まあそうだろうなあ。
ちなみにmixi Developer Centerには
「SDKを利用するには、MixiContainerインスタンスの init メソッドをコールします。」
としか書いてないんだぜ。
なんだろ。何がだめなのかなあ。
No.10
2011/05/28 (Sat) 22:49:54
package net.edo.hrio.mixiclient; import jp.mixi.android.sdk.*; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.*; public class mixiClient extends Activity { private MixiContainer container; private int AUTHORIZE_REQUEST_CODE; private TextView text; private Button button1; private Button button2; private boolean Auth; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView)findViewById(R.id.text1); button1 = (Button)findViewById(R.id.button1); button2 = (Button)findViewById(R.id.button2); Config config = new Config(); config.clientId = "APIキー"; config.selector = Config.GRAPH_API; container = MixiContainerFactory.getContainer(config); container.init(this); //ここ! /*Auth = container.isAuthorized(); */ Auth = false; ButtonClickSet(Auth); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" /> <Button android:id="@+id/button1" android:layout_width="150dip" android:layout_height="wrap_content" android:onClick="mixiAuthentic" android:text="mixi認証" /> <Button android:id="@+id/button2" android:layout_width="150dip" android:layout_height="wrap_content" android:onClick="AuthDestroy" android:text="mixi認証" /> </LinearLayout>
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
最新記事
(03/13)
(01/08)
(06/08)
(05/29)
(05/28)
最新TB
プロフィール
HN:
柊里緒
性別:
女性
職業:
学生
自己紹介:
使用端末:IS05
この小ささがとても嬉しい。他のスマホ片手で使えません。
PC:Windows7(32ビット版)
最近やや不審な動きをするのが怖い。
備考:VOCALOID大好きです。
twitterやってます。
この小ささがとても嬉しい。他のスマホ片手で使えません。
PC:Windows7(32ビット版)
最近やや不審な動きをするのが怖い。
備考:VOCALOID大好きです。
twitterやってます。
カウンター
ブログ内検索
P R