戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
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
31
08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ScrollViewの余白の不具合 (Android 2.3.3 GingerBread 以下)

Android ではレイアウトをスクロールさせる場合、ScrollView を使います。

しかし、この ScrollView には余白 (android:layout_marginandroid:padding) に不具合があります。
不具合の内容は以下のとおり。


概要:
 ScrollView の余白が正しく設定されない

バージョン:
 Android 2.3.3 以下

 ※ Android 3.* (API 11~13 / HanyComb) はエミュレータで確認したところ正常な結果となりました。
  ただし、Graphical Layout では誤った結果、それも Android 2.3.3 以下とは違った表示になります。
  実機では動作確認をしていませんが、エミュレータで正しく表示されたのでとりあえずOKとしています。

詳細:
 ScrollView 直下の View の android:layout_margin, android:padding が正しく反映されない。
 top, bottom の余白は無効となり、left の余白は right に加算される。

実験:
 以下のレイアウト構成に上から順に layout_margin="10dp" を設定する。

ScrollView (#ffffff)
└ LinearLayout (#cccccc)
 └ TextView (#ff8080)

正しい結果 (Android 4.2 / API 17 / JellyBean)
android_scroll_margin_api17.png

誤った結果 (Android 2.3.3 / API 10 / GingerBread)
android_scroll_margin_api10.png

XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#cccccc" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff8080"
android:text="ScrollView margin" />
</LinearLayout>
</ScrollView>

<View
android:layout_width="match_parent"
android:layout_height="10dp" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cccccc" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#ffffff" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff8080"
android:text="LinearLayout margin" />
</LinearLayout>
</ScrollView>

<View
android:layout_width="match_parent"
android:layout_height="10dp" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cccccc" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#ff8080"
android:text="TextView margin" />
</LinearLayout>
</ScrollView>

</LinearLayout>

対応:
 実験の結果から ScrollView 直下のみ余白が正しく設定されないことがわかります。
 そこで余白は ScrollView 自身か、階層が深くなってしまうが ScrollView 直下にレイアウトを追加してそのレイアウトに View or ViewGroup を設定すればバージョンに関係なく正しく表示されるようになります。
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。