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

ListRowPresenter で作成されたほぼすべての行のように見える、Horizo​​ntalGridView ベースの行を中央に配置するのは奇妙なほど難しいことがわかりました。すべて左詰めのようです。ここで提供された提案はどれもうまくいかないようだったので、代わりに、デフォルトのビデオ タイトル/説明ドックを独自のカスタム ビューに置き換えることにしました。この他の密接に関連する質問の詳細:

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

于 2016-06-09T22:06:51.710 に答える
0

PlaybackControlsRow で setSecondaryActionsAdapter 呼び出しを使用して、メイン コントロールの下に 2 行目のアクションを追加できます。

方法の例については、https : //android.googlesource.com/platform/development/+/29dadb6d144817840372af52629b4b34c074b78d/samples/SupportLeanbackDemos/src/com/example/android/leanback/PlaybackOverlayFragment.java をご覧ください。

于 2016-05-18T16:45:56.430 に答える
-1

配置は Horizo​​ntalGridView の固有のプロパティであると思います。問題は、ビュー全体を意味するグリッドビューが画面の幅を占めることだと思います。

ビューのサイズを縮小するには、プログラムまたは XML を介してレイアウト パラメータを変更する必要がありますWRAP_CONTENT。これは、意味のある最小の幅を意味するか、設定された幅を提供することを意味します。

これらのいずれの場合も、グリッドが小さくなるため、センタリング アトリビュートの効果が顕著になります。

于 2016-04-24T21:31:07.197 に答える