6024
現在私は､AndroidでYouTubeのプレイヤーアプリを作っています｡そこで質問です｡  
YouTubeアプリの動画再生画面のを再生するフレームの下には､以下の画像のように動画の各情報が出ると思うのですが､このレイアウトをどのようにつくるか考えた時に私は次のように考えました｡

**Layout.xml:**

```

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <LinearLayout
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:context="com.example.zousan.VideoPlayerActivity"
        android:orientation="vertical">
    
        <fragment
            android:name="com.google.android.youtube.player.YouTubePlayerFragment"
            android:id="@+id/youtube_fragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </fragment>
    
        <ExpandableListView
            android:id="@+id/title_and_view_count"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ExpandableListView>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
    
            <TextView
                android:id="@+id/good"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_action_good"
                android:contentDescription="@string/good"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_action_bad"
                android:contentDescription="@string/bad"/>
        </LinearLayout>
    
        <ListView
            android:id="@+id/ch_title_and_sub"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ListView>
    
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/suggestion"/>
    
        <GridLayout
            android:id="@+id/suggest_videos"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </GridLayout>
    </LinearLayout>
    
```

しかしこれだと､`ScrollView`の下に`GridView`があるのでおそらく実行できません｡ なにか､いい方法はありますでしょうか｡  
私はこの代替案として2つ考えました｡  
まず1つは`ScrollView`はそのままに､`ScrollView`以下のコンポーネントをそれぞれ`Fragment`として､まとめる方法｡しかしこの方法は､動画の詳細を取得するリクエストが複雑になると考えられます｡  
2つめは､`FrameLayout`を用いて､同じく`ScrollView`配下に設置する｡しかしこの方法では`ListView`が`Useless`になってしまう｡

他に何かいいアイデアがありましたら教えて下さい｡ よろしくお願いします｡

![スクリーンショット](https://i.stack.imgur.com/12nQ2.png)
CC BY-SA 3.0
2015-02-05T13:19:53.417
6011
2015-02-05T17:01:50.387
7232
question
android java youtube-data-api android-layout
Android公式YouTubeアプリのLayoutについて
Youtube バージョン10.04.5をAndroid Device Monitorで見たところ、

YouTubePlayerFragment  
video_info_fragment (idから察するに動画の情報と関連動画一覧を表示させるFragment）

の2つが縦にならんでいる感じです。

YouTubePlayerFragmentはスクロールしなかった  
（つまりスクロールするのはvideo_info_fragmentの領域のみ）ので、  
Youtubeプレイヤーと同じレイアウトにしたいのであれば

  * YouTubePlayerFragment
  * ListView（かヘッダー挿入可能なGridView）

をLinearLayoutを使って縦に並べる感じになると思います。  
ListViewの場合に表示するViewの種類は  
- ヘッダ（Official Call of Duty... から Subscribeの部分） x1  
- セクションヘッダ（Suggestionsの部分) x1  
- おすすめ動画（サムネイル・テキストのあるViewを横3つに並べたもの） x行数分  
になります。

ListViewの各行に違うViewを表示させる方法については、  
BaseAdapter#getViewTypeCount()  
BaseAdapter#getItemViewType(int position)  
をオーバーライドすることで実現できます。

以下のリンクが参考になると思います。  
<http://blogand.stack3.net/archives/61>

ヘッダー挿入可能なGridView、例えば  
<http://tech.recruit-mp.co.jp/mobile/android-headerfootergridview/>  
<https://android-arsenal.com/details/1/1070>  
にあるようなものを使っても実現できると思います。
CC BY-SA 3.0
2015-02-05T17:01:50.387
6024
2015-02-05T17:01:50.387
4739
6011
answer