ScrollViewでScrollできない

2,920 views
Skip to first unread message

チョンボ

unread,
Sep 27, 2013, 11:36:49 PM9/27/13
to android-g...@googlegroups.com
お世話になっております。

現在レイアウトファイルにScrollViewを実装したのですが、スクロールされない状況になってしまいました。
レイアウトファイルは以下です。
<?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:id="@+id/layout_main"
    android:orientation="vertical" 
    android:background="@drawable/background"
    android:weightSum="3">
    
    <View android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.2"/>
    
    
    <ScrollView 
    android:layout_width="match_parent"
        android:layout_height="match_parent">    
    <include layout="@layout/table_layout"
        android:id="@+id/table"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginRight="15dp"
        android:layout_marginLeft="17dp"
        android:layout_weight="0.35"/>
   
    </ScrollView>
    <View android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.45"/>
    

</LinearLayout>



ScrollView内のinclude先にはTableLayoutが入っています。

この場合なぜスクロールされないのでしょうか?

宜しくお願い致します。

Hirokazu Fukami

unread,
Sep 27, 2013, 11:43:27 PM9/27/13
to android-g...@googlegroups.com
こんにちはfkmです

多分ですが、ScrollViewの
android:layout_height="match_parent"

android:layout_height="wrap_content"
にしないとだめだったような気がします(Lintが黄色の警告だしてませんか?)

2013/9/28 チョンボ <chonbo...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

チョンボ

unread,
Sep 28, 2013, 12:15:43 AM9/28/13
to android-g...@googlegroups.com
fkm様

さっそくのコメントありがとうございます。
ScrollViewのandroid:layout_heightの件ですが、警告を出しておらず、変えてみてもスクロールが適応されませんでした。


mab

unread,
Sep 28, 2013, 7:16:13 AM9/28/13
to android-g...@googlegroups.com
mab です。

スクロール以前に、レイアウトが期待通りになっていない様に思えます。

layout_weight の注意点として次の 2 点を確認してみてください。

★1 layout_weight を指定する際には、layout_width または layout_height を 0dp に指定する。
★2 layout_weight は、あくまで、同レベルのオブジェクトに対して有効。


具体的には、まず、LinearLayout 直下の 2 つの View と 1 つの ScrollView の layout_height を 0dp にしてみてください。(★1)

次に、include タグに書いてある layout_weight を消して、 ScrollView に layout_weight を書いてください。(★2)

layout_weight を指定してある他の 2 つの View は LinearLayout 直下ですので、それら View と同じく LinearLayout 直下の ScrollView に layout_weight を指定します。ScrollView の子 View である include タグに指定しても、ScrollView 内の余白の分け方を指定することになってしまいます。


以上 2 点で layout_weight は、「指定通り」に反映されるのではないかと思います。ただし、その結果はまだ「期待通り」ではないかもしれません。^^;
恐らく、layout_weight は上から、0.6, 1.8, 0.6 くらいにすると期待している見た目に近づくのではないでしょうか。(weightSum を 3 のままとした場合)


スクロール問題の直接の解決にはなりませんが、このままだと ScrollView が画面の外にはみ出してしまっているはずなので・・・。



ここからは余談ですが。
今回の場合 weightSum の指定は不要だと思います。weightSum を指定しなければ、自動的に子オブジェクトの layout_weight の合計が weightSum になりますので。(★3)
weightSum は、layout_weight の合計値以上の値を指定して、子オブジェクトの後に余白を残す場合に使うんだそうです。(というか、今回調べるまで weightSum のことは知りませんでした^^;)
http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum

layout_weight と weightSum については、以下のサイトに実例があり、分かりやすいです。
http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=108

その記事中からもリンクされていますが、以下のサイトには 0dp でなく match_parent(fill_parent) を指定した場合の影響について、興味深い解説があります。
http://zaki.tdiary.net/20110702.html


以上

チョンボ

unread,
Sep 30, 2013, 2:20:37 AM9/30/13
to android-g...@googlegroups.com
mab様

コメントありがとうございます。
mab様のコメント通り実装すると思っていた仕様になりました。
本当にありがとうございます。

リンクも見させて頂き非常に勉強になりました。

今後ともこちらのリンクを見直して精進してまいります。

ありがとうございました。

mab

unread,
Sep 30, 2013, 4:26:23 AM9/30/13
to android-g...@googlegroups.com
解決してなによりです。

layout_weight はあくまで「余白を割り当てる」という機能なので、match_parent を指定すると余白が負の数となる場合が有り、不可解な挙動になってしまいます。
恐らく「余白を割り当てる」ことでレイアウトの階層が減らせるという考えなのでしょうが、もっと直接的に weight を指定できる機能があってもいいのにな、と思います。

以上

Reply all
Reply to author
Forward
0 new messages