Android TvView:改变纵横比

agxfikkp  于 2023-06-04  发布在  Android
关注(0)|答案(1)|浏览(212)

我在我的android tv应用程序中使用android.media.tv.TvView在应用程序中的一个小空间(片段)中观看直播电视。
在观看板球直播时,客户抱怨他们看不到底部的比分。如何调整TvView的纵横比或缩放内容来解决此问题?
我的片段布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.media.tv.TvView
        android:id="@+id/tvView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

初始化TvView的片段代码:

TvInputManager mTvInputManager = (TvInputManager) requireContext()
                .getSystemService(Context.TV_INPUT_SERVICE);
List<TvInputInfo> inputs = mTvInputManager.getTvInputList();

List<String> ids = new ArrayList<>();
for (TvInputInfo info : inputs) {
     if (info.getType() == type) {
         String id = info.getParentId() != null ? info.getParentId() : info.getId();
         if (!ids.contains(id)) {
             ids.add(id);
         }
     }
}
int idx = viewModel.deviceDetails.getSettings().getOtherDetails().getPort() - 1;
String id = ids.get(idx);
tvView.setVisibility(View.VISIBLE);
tvView.tune(id, TvContract.buildChannelUriForPassthroughInput(id));
mnemlml8

mnemlml81#

android.media.tv.TvView类不提供设置宽高比的直接方法。但是,您可以通过在其父布局中调整TvView的布局参数来实现所需的宽高比。
以下是如何以编程方式设置TvView的宽高比的示例:

TvView tvView = findViewById(R.id.tv_view); // Assuming you have a TvView in your layout

// Calculate the desired aspect ratio (e.g., 16:9)
float aspectRatio = 16f / 9f;

// Get the parent layout of the TvView
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) tvView.getLayoutParams();

// Calculate the new width and height based on the aspect ratio
int width = getResources().getDisplayMetrics().widthPixels;
int height = (int) (width / aspectRatio);

// Set the new width and height
layoutParams.width = width;
layoutParams.height = height;

// Apply the new layout parameters to the TvView
tvView.setLayoutParams(layoutParams);

在本例中,我们根据所需的宽高比(本例中为16:9)计算TvView的新宽度和高度。我们假设TvView的宽度应该与设备屏幕的宽度相匹配。然后,我们通过将宽度除以纵横比来计算高度。最后,我们更新TvView的布局参数以反映新的宽度和高度。
通过动态调整TvView的布局参数,您可以在Android上实现TvView所需的纵横比。

相关问题