【问题标题】:How to Change Screen Resolution Programmatically?如何以编程方式更改屏幕分辨率?
【发布时间】:2011-01-07 12:54:35
【问题描述】:

让我告诉你我的问题。我想改变我的屏幕分辨率。 我可以在应用程序中更改它,但它只更改应用程序的 屏幕。我想设置系统的分辨率,所以这并不重要 应用程序在前面运行。我的设备分辨率设置为 1280 * 720 页。我可以把它设为 1260 * 680 吗?如果需要更改 安卓源代码,我可以。只要告诉我在哪里改变。等待 你的帮助。

【问题讨论】:

  • 我遇到过LCD Density,一个正是这样做的应用程序。看看我能不能知道它是怎么做到的......
  • 我的问题不是密度;这是关于像素的。我想改变显示的实际尺寸。
  • 如何更改 java 代码的分辨率?我有连接到 HDMI 屏幕的设备 (android 4.4),我可以使用系统设置 > 显示 > 分辨率 > DACOUT_1080P_60 和显示器切换到 1080p,但即使我将分辨率设置为 480p,我的应用程序始终呈现为 720p

标签: java android resolution


【解决方案1】:

This thread on xda-developers 应该让你走上正轨。

【讨论】:

  • 谢谢。但是,我不想改变密度。我想改变真实像素来缩小显示。
  • @user511853 更改真实像素需要撕掉屏幕并放入新屏幕。更改pixel density 是您想要的,保证!
【解决方案2】:

搜索对此的有效答案,但我有解决方案的线索: 警告实验性错误的东西:

/*
Requires android.permission.WRITE_SETTINGS
and android.permission.WRITE_SECURE_SETTINGS, thus it requires the app to be a system app.
 */
public void changeResolution(int x, int y){
    try { Class c = Class.forName("android.os.ServiceManager");
        try { Method method = c.getDeclaredMethod("checkService", String.class);
            try {
                IWindowManager mWindowManager = IWindowManager.Stub.asInterface((IBinder) method.invoke(null,Context.WINDOW_SERVICE));
                try { mWindowManager.setForcedDisplaySize(Display.DEFAULT_DISPLAY,x,y);
                } catch (RemoteException e) {e.printStackTrace();}
            }  catch (IllegalAccessException e) {e.printStackTrace();}
            catch (InvocationTargetException e) {e.printStackTrace();}
        } catch (NoSuchMethodException e) {e.printStackTrace();}
    } catch (ClassNotFoundException e) {e.printStackTrace();}
}

将 IWindowManager 的简化 AIDL 版本添加到您的项目中: /app/src/main/aidl/android/view/IWindowManager.aidl

package android.view;
interface IWindowManager
{
    boolean startViewServer(int port);   // Transaction #1
    boolean stopViewServer();            // Transaction #2
    boolean isViewServerRunning();       // Transaction #3

    void setForcedDisplaySize(int displayId, int width, int height);
    void clearForcedDisplaySize(int displayId);
    void setForcedDisplayDensity(int displayId, int density);
    void clearForcedDisplayDensity(int displayId);
}

该应用程序需要位于系统应用程序文件夹中。 它肯定会做一些事情,但现在它也会导致严重的错误。 重新启动似乎会取消更改。

等待对此的反馈。

【讨论】:

    【解决方案3】:

    如果您使用的是 Windows 并且知道如何使用 JNI,Microsoft 提供了 C++ Win32 函数调用来执行此操作:ChangeDisplaySettingsEx()EnumDisplaySettings()

    【讨论】:

    • 我们在谈论 Android。
    • 其他用户将使用非 Android 搜索屏幕分辨率来访问此线程。我列出的功能将对他们有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多