0

我正在尝试使用 Leanback 创建一排操作项,它们位于视频播放器中播放器控件栏的正上方。

操作项是可操作的图像视图的 ListRow(表示表情符号反应)。

我的问题:我无法让它们位于中心位置,就像主要和次要控制栏以播放器为中心一样。当前列表行如下所示:表情符号项目

这是定义单个操作的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<com.makeramen.roundedimageview.RoundedImageView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/rounded_image_view"
        android:src="@drawable/ic_action_insert_emoticon"
        android:scaleType="fitStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        app:riv_corner_radius="30dip"
        app:riv_border_width="2dip"
        app:riv_border_color="#333333"
        app:riv_tile_mode="repeat"
        app:riv_oval="true">
</com.makeramen.roundedimageview.RoundedImageView>

以及实例化每个行项目的演示者:

public class RoundedViewPresenter extends Presenter {
    private static final String TAG = RoundedViewPresenter.class.getSimpleName();

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View rootView = inflater.inflate(R.layout.rounded_image_view, parent, false);
        RoundedImageView roundedImageView = (RoundedImageView) rootView.findViewById(R.id.rounded_image_view);

        //roundedImageView.mutateBackground(true);
        //roundedImageView.setBackground(backgroundDrawable);
        roundedImageView.setFocusable(true);
        roundedImageView.setFocusableInTouchMode(true);
        ((HorizontalGridView)parent).setGravity(Gravity.CENTER);
        return new ViewHolder(roundedImageView);
    } ...

然后像这样在播放器的片段中添加行:

// add emoji rows
...
ArrayObjectAdapter emojiRowAdapter = new ArrayObjectAdapter(new RoundedViewPresenter());
emojiRowAdapter.add(mObjectModel0);
emojiRowAdapter.add(mObjectModel1);
emojiRowAdapter.add(mObjectModel2);
emojiRowAdapter.add(mObjectModel3);
ListRow emojiRow = new ListRow(emojiRowAdapter);
mRowsAdapter.add(emojiRow);
...

我已经尝试了 android:layout_gravity="center" 和编程 Horizo​​ntalGridView.setGravity ()方法,但都没有成功。

知道为什么和/或将行居中的替代方法吗?

4

4 回答 4

0

您可以使用 PlaybackControlsRow 中的 setSecondaryActionsAdapter 调用在主控件下添加第二行操作。

查看:https ://android.googlesource.com/platform/development/+/29dadb6d144817840372af52629b4b34c074b78d/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java以获取有关如何执行此操作的示例。

于 2016-05-18T16:45:56.430 回答
0

事实证明,将任何基于 Horizo​​ntalGridView 的行居中是非常困难的,这似乎几乎是使用 ListRowPresenter 创建的每一行。一切似乎都是左对齐的。这里提供的建议似乎都不起作用,所以我决定用我自己的自定义视图替换默认的视频标题/描述停靠栏。这个其他密切相关的问题中的详细信息:

https://stackoverflow.com/a/37736890/1145905

于 2016-06-09T22:06:51.710 回答
-1

试试这个属性android:layout_gravity="center_horizontal|center_vertical"

Like below xml code.

<?xml version="1.0" encoding="utf-8"?>
<com.makeramen.roundedimageview.RoundedImageView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/rounded_image_view"
        android:src="@drawable/ic_action_insert_emoticon"
        android:scaleType="fitStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        app:riv_corner_radius="30dip"
        app:riv_border_width="2dip"
        app:riv_border_color="#333333"
        app:riv_tile_mode="repeat"
        app:riv_oval="true">
</com.makeramen.roundedimageview.RoundedImageView>

It will exact center as you want in your output.

于 2016-04-21T12:33:03.553 回答
-1

我相信对齐是 Horizo​​ntalGridView 的固有属性。我认为问题在于网格视图,即整个视图,占据了屏幕的宽度。

为了减小视图的大小,您必须以编程方式或通过 XML 将布局参数更改为WRAP_CONTENT有意义的最小宽度或提供设定的宽度。

对于其中任何一个,网格都会更小,因此您的居中属性将产生明显的效果。

于 2016-04-24T21:31:07.197 回答