RelativeLayout内にScrollViewの実装を試みる



ScrollViewを使えばレイアウト内に配置したウィジェットが画面からはみ出た場合でも、画面をスクロールすることが可能ですが、RelativeLayoutの下にScrollViewをいれると何故か画面がスクロールしません。RelativeLayout>LinearLayout>ScrollViewの順番でもやはりScrollViewが効かない…。



<RelativeLayout...>
  <LinearLayout...>
    <ScrollView...>
      各種ウィジェットのタグを記載…
    </ScrollView>
  <LinearLayout>
<RelativeLayout>



半日ほど試行錯誤しましたが、やはりうまくいかないので
ListViewを代用することにしました。
デフォルトのリストビューだと、見た目が悪いので
色々カスタマイズする必要があります。


ListViewのカスタマイズ
  • ListViewのレイアウト
  • 区切り線(divider)
  • リストビューをタッチした時のアニメーション


1.ListViewのレイアウト


ListViewクラスでリスト要素を動的にセットする場合は、
Adapterクラスを使いますが、このクラスを拡張せずにそのまま使った場合、
デフォルトのもっさいListViewのままです。
以下は拡張したクラスのコンストラクタで独自のレイアウトファイルを
使うようにしている例です。

super(context, textViewResourceId);
// TODO Auto-generated constructor stub
this.inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

getViewメソッドをオーバーライドして、レイアウトファイルをセットします。

View view = convertView;
if (view == null) {
    view = inflater.inflate(R.layout.original_view, null);
}

2.区切り線をオリジナルの画像に変える


任意サイズの画像を作成します(png推奨)。この画像ファイルを
プロジェクトのdrawableフォルダーに放り込み、カスタマイズする
ListViewのdividerタグに、先程作成した画像ファイルを指定します。

android:divider="@drawable/divider_original"

3.リストビューをタッチした時のアニメーション


デフォルトのリストビューを使った場合はタッチしたアイテムの色が
オレンジとかに変わりますが、独自のレイアウトファイルを使った場合は、
レイアウトに背景色を設定するとタッチしてもアイテムの色が変わらなくなります。
僕の場合、リストビューをスクロール可能なTextViewに見せたかったので、
タッチしても色が変わらないようにしました。