Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TV的倾斜:取消设置视频标题会增加行间距_Android_Android Tv_Leanback - Fatal编程技术网

Android TV的倾斜:取消设置视频标题会增加行间距

Android TV的倾斜:取消设置视频标题会增加行间距,android,android-tv,leanback,Android,Android Tv,Leanback,的PlaybackOverlayFragment使用PlaybackControlsGlue根据数据模型设置播放控件。这是使用标准胶水时的外观: 我的问题是,我不希望标题/副标题文本出现在主播放器控件栏上方-我们希望它们出现在播放器屏幕的左上角。因此,为了禁用标题/副标题的显示,我覆盖了glue的createControlsRowAndPresenter(),而是使用PlaybackControlsRowPresenter的空args构造函数: @Override public Playbac

的PlaybackOverlayFragment使用PlaybackControlsGlue根据数据模型设置播放控件。这是使用标准胶水时的外观:

我的问题是,我不希望标题/副标题文本出现在主播放器控件栏上方-我们希望它们出现在播放器屏幕的左上角。因此,为了禁用标题/副标题的显示,我覆盖了glue的
createControlsRowAndPresenter()
,而是使用PlaybackControlsRowPresenter的空args构造函数:

@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;
}
结果如何?没有预期的标题/副标题显示,但现在主控件栏和其他行之间的间距更大:


我可能做错了什么,或者这是leanback库的错误?

如果没有这两行文本,播放控件现在位于该视图的顶部。您可能可以对播放控件应用边距或填充,以将其移动到预期位置。

结果显示,播放控件需要在其上方有一些视图,这样它们就不会占据容器视图的顶部(@Nick是对的)。但我想分享我的解决方案,以防有人有类似的需求

PlaybackControlsRowPresenter可以接受其构造函数中的任何演示者,而不仅仅是AbstractDetailsDescriptionPresenter。因此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
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);
}
EmojiRowPresenter是Presenter的一个子类,如下所示:

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
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从定义每个项目的布局创建视图。以下是最终结果: