我正在尝试使用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”和程序化HorizontalGridView.setGravity()方法而没有成功。
知道为什么和/或替代方法使行居中?
答案 0 :(得分:0)
试试这个属性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.
答案 1 :(得分:0)
我相信对齐是HorizontalGridView的固有属性。我认为问题是网格视图(意味着整个视图)占据了屏幕的宽度。
为了减少视图的大小,您必须以编程方式或通过XML将layout params更改为{{1}},这意味着有意义的最小宽度或提供设置的宽度。
对于其中任何一个,网格将更小,因此您的居中属性将产生明显的效果。
答案 2 :(得分:0)
您可以使用PlaybackControlsRow中的setSecondaryActionsAdapter调用在主控件下添加第二行操作。
答案 3 :(得分:0)
原来很难将任何基于HorizontalGridView的行居中,这似乎几乎是使用ListRowPresenter创建的每一行。一切似乎都是左倾的。这里提供的建议似乎都不起作用,所以我决定用我自己的自定义视图替换默认的视频标题/描述码。其他密切相关的问题详情如下: