2016-06-01 29 views
3

sample appのPlaybackOverlayFragmentは、PlaybackControlsGlueを使用してデータモデルに基づいて再生コントロールを設定します。 enter image description hereAndroid TVのLeanback:ビデオタイトルの設定を解除すると、行間の間隔が広がります

私の問題は、メインのプレーヤーコントロールバーの上にタイトル/サブタイトルのテキストが表示されないようにすることです。プレーヤーの画面の左上に表示する必要があります。代わりに。したがって、タイトル/字幕の上映を無効にするには、私は接着剤のcreateControlsRowAndPresenter()を無効にし、代わりにPlaybackControlsRowPresenterの空引数のコンストラクタを使用します。

@Override 
public PlaybackControlsRowPresenter createControlsRowAndPresenter() { 
    PlaybackControlsRow controlsRow = new PlaybackControlsRow(this); 
    setControlsRow(controlsRow); 
    final View.OnKeyListener onKeyListener = this; 
    PlaybackControlsRowPresenter presenter = new PlaybackControlsRowPresenter() { // no AbstractDetailsDescriptionPresenter argument 
     @Override 
     protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) { 
      super.onBindRowViewHolder(vh, item); 
      vh.setOnKeyListener(onKeyListener); 
     } 
     @Override 
     protected void onUnbindRowViewHolder(RowPresenter.ViewHolder vh) { 
      super.onUnbindRowViewHolder(vh); 
      vh.setOnKeyListener(null); 
     } 
    }; 

    // secondaryActionsAdapter setup not shown 
    presenter.setOnActionClickedListener(new OnActionClickedListener() { 
     @Override 
     public void onActionClicked(Action action) { 
      dispatchAction(action); 
     } 
    }); 

    return presenter; 
} 

結果を?タイトルやサブタイトルは期待通りに表示されませんが、今度はメインコントロールバーと他の行との間隔が広がります: almost double spacing when title is not set

私は間違ったことをすることができますか、またはそれはleanbackライブラリのバグですか?

答えて

0

再生コントロールには、コンテナビューの上部を占有しないように、再生コントロールの上にいくつかのビューが必要です(@ニックが正しい)。しかし、誰かが同様のニーズを持っている場合に備えて私のソリューションを共有したいと思っていました。

PlaybackControlsRowPresenterは、AbstractDetailsDescriptionPresentersだけでなく、そのコンストラクタ内の任意のプレゼンターを取り込むことができます。だから、createControlsRowAndPresenter()は次のようになります。

EmojiRowPresenter emojiRowPresenter = new EmojiRowPresenter() { 
      @Override 
      protected void onBindEmojiInfo(EmojiRowView rowView, EmojiInfo emojiInfo) { 
       rowView.setEmojiInfo(emojiInfo); 
      } 
     }; 
PlaybackControlsRowPresenter presenter = new PlaybackControlsRowPresenter(emojiRowPresenter) { // replace the default description presenter with custom presenter 
... 
} 

// everything else stays as before 

とEmojiRowPresenterは次のようになりプレゼンターのサブクラスである:もちろん

public abstract class EmojiRowPresenter extends Presenter { 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent) { 
     EmojiRowView emojiRowView = new EmojiRowView(parent.getContext()); 
     emojiRowView.setFocusable(true); 
     emojiRowView.setFocusableInTouchMode(true); 
     return new ViewHolder(emojiRowView); 
    } 

    @Override 
    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { 
     EmojiRowView emojiRowView = (EmojiRowView) viewHolder.view; 
     PlaybackControlHelper glue = (PlaybackControlHelper) item; 
     EmojiInfo emojiInfo = glue.getEmojiInfo(); 
     if (emojiInfo != null) { 
      onBindEmojiInfo(emojiRowView, emojiInfo); 
     } 
    } 

    @Override 
    public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { 
     // ... 
    } 

    protected abstract void onBindEmojiInfo(EmojiRowView rowView, EmojiInfo emojiInfo); 
} 

、EmojiRowViewは、各項目を定義するレイアウトからビューを作成します。結果は次のとおりです。

enter image description here

0

これらの2行のテキストがないと、再生コントロールがそのビューの一番上に表示されるようになりました。おそらく余白やパディングを再生コントロールに適用して、それを予想される場所に移動することができます。

関連する問題