我正在编写一个 AndroidTV 应用程序,可以在 4K 设备上显示 4K 图像。火棒4K。由于 AndroidTV 和 FireTV 似乎都将其 UI 报告为 1920x1080,无论设备是否为 4K,这怎么办?
如果我使用此代码来报告以像素为单位的尺寸:
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (windowManager != null) {
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
}
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
即使设备是 4K 并连接到 2160p 的 4K 显示器,宽度和高度也将为 1920x1080。
我的布局文件使用简单的FrameLayout:
<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:padding="0dp"
tools:context="com.app.my.MainActivity"
android:id="@+id/myframe"
android:layout_gravity="center"
>
imageView 本身和框架使用 getWidth() 和 getHeight() 报告为 1920x1080。
任何帮助将不胜感激。
在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.INTERNET" />
检查物理显示尺寸
Display display = windowManager.getDefaultDisplay();
Display.Mode mode = display.getMode();
int width = mode.getPhysicalWidth();
int height = mode.getPhysicalHeight();
Log.d("Display Info", "Width: " + width + " Height: " + height);
设置 ImageView 使用全分辨率:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false; // Prevent Android from scaling down the image
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_4k_image, options);
imageView.setImageBitmap(bitmap);
在应用程序模块的build.gradle文件中添加Glide库
implementation 'com.github.bumptech.glide:glide:4.13.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0'
处理位图加载和内存
Glide.with(this)
.load(R.drawable.my_4k_image)
.into(imageView);