2011年01月19日

閑話休題

しかしなんですね、独り言を書いているはずなのに、なぜか「ですます調」。
アクセスログを見るとごくわずかな人が見ているようなので、なんか申し訳ないです。
プログラムもテキトーですが、いっぱいいっぱいなので、ブログの文章も適当で、自分以外の人が読むと意味不明なのではないかな、と。あまりにも毎日悩むことが多すぎて少し時間が経つと、詳しい内容を忘れるという半アルツハイマー状態ですし。

そういえば、ページがブログなのにインラインフレームを使っているのか?コードの部分の記述に行番号がついてスクロールできるようになっているのを見かけますが、あれはどういう仕組みなんですかね?
毎回自分で書いているとも思えないし、そういう機能を持ったブログシステムがあるのでしょうか?

ところで、まだ初めて間もないこのブログですが、もしかしたら引っ越し、というかURLが変わるかも知れません。
絶対いないと思いますが、万が一ブックマークに入れている人などいたら、ごめんなさい。
まだ引っ越すかどうか分かりませんけどね。

それにしても、いよいよ作っているアプリも完成間近かも知れないという状況。
よほどのことがなければ今月中にアップできるでしょうか?
まあ、その前にアイコン作ったりとか色々あるのですが、できるといいなあ。

posted by 白虹 at 00:23| Comment(0) | TrackBack(0) | Android開発

Viewの高さを動的に変更したい!

あまり見かけないような気がする設定ですが、最初画面の向きが切り替わった時ListViewの高さをコードで制御したいと思っていましたが、やり方が分からず断念してました。
しかし、突如追加機能として、ListViewの高さを可変にしたいと思いつき、それにともなってViewの高さをコードで制御することに再挑戦。

いくつかのサイトを参考にさせていただくと、画面を傾けた時protected void onSaveInstanceState(Bundle outState){}で設定を保存し、onCreate(){}のsavedInstanceStateで設定を戻すとか、onPauseで事前に設定を保存するとか違う情報があり、少々錯綜していました。

そこで自分のプログラムのログを観察すると、(少なくとも実機では)画面が縦または横に切り替わった後public void onConfigurationChanged(Configuration newConfig){}が呼ばれており、事前にonPause(){}やonSaveInstanceState(){}は呼ばれてはいないようでした。
そして、結局onCreate(){}で設定が初期化されてしまうので、思った通りに動作しませんでした。

うーん。
また、しばらく試行錯誤……

最終的に、JavaDrive様で見つけたLayoutParamsで高さと幅を返すメソッドを利用し、onCreate(){}とonConfigurationChanged(){}で呼び出すことで成功しました。
以下が成功したメソッドの列挙抜粋。


LinearLayout linearLayout;

public void onCreate(Bundle savedInstanceState) {
linearLayout = (LinearLayout)findViewById(R.id.lvll); // ListViewの高さを設定するためのレイアウト
listView = (ListView)findViewById(R.id.lv); // リスト表示用ListView lv

linearLayout.setLayoutParams(createParam());
}

private LinearLayout.LayoutParams createParam(){
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
int w = disp.getWidth();
int h = disp.getHeight() / 2;

return new LinearLayout.LayoutParams(w, h);
}

@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);

linearLayout.setLayoutParams(createParam());
}


// main.xmlの抜粋

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/lvll"
   >
   <ListView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/lv"
   />
</LinearLayout>


まあ、なんのためにこんな設定が必要か分からないと思いますし、あまり参考にならないと思いますが、ListViewに限った話ではないと思うので、一応。
(しかし、別途あるTextViewの高さやシステムの通知エリアの大きさを取得できない問題が残ったままなのでした。(涙))
posted by 白虹 at 00:10| Comment(0) | TrackBack(1) | Android開発