【问题标题】:Wallpaper image not displayed in the correct size on all devices壁纸图像未在所有设备上以正确尺寸显示
【发布时间】:2017-07-05 18:53:35
【问题描述】:

我做了一个应用程序,它使用几个 png 图像以定时间隔设置壁纸。屏幕上显示的壁纸尺寸并非所有设备都正确。在 9.7 英寸的平板电脑上,这个尺寸是完美的,其中包含足够的空间来左右滚动。然而在手机上,每张图像只能看到一小部分。看起来它被放大了。

我需要什么编码来告诉 Android 在所有设备上以正确的尺寸显示图像?

我假设 WallpaperManager 做到了这一点,但我似乎还不知道如何使用它。

这是我更改壁纸的方法:

myWallpaperManager.setResource(R.drawable.muzdalifah);

编辑显示用于更改壁纸的所有代码:

public class AlarmReceiverChangeImage extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    /*
     * Make the settings available from the settings xml file.
     */
    SharedPreferences mySettings = PreferenceManager
            .getDefaultSharedPreferences(context);

    /*
     * Allow editing.
     */
    SharedPreferences.Editor editor = mySettings.edit();

    /*
     * Get the settings into variables.
     */
    boolean bln_checkbox_changing_is_activated = mySettings.getBoolean(
            "checkbox_changing_is_activated", false);

    String myCurrentImageName = mySettings.getString("current_image",
            "kabanight1");

    WallpaperManager myWallpaperManager = WallpaperManager
            .getInstance(context.getApplicationContext());

    if (bln_checkbox_changing_is_activated == true) {

        if (myCurrentImageName.equals("tentcity")) {

            try {

                myWallpaperManager.setResource(R.drawable.kabacloseup);
                myCurrentImageName = "kabacloseup";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabacloseup")) {
            try {

                myWallpaperManager.setResource(R.drawable.kabanight1);
                myCurrentImageName = "kabanight1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabanight1")) {
            try {

                myWallpaperManager.setResource(R.drawable.madina1);
                myCurrentImageName = "madina1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("madina1")) {
            try {

                myWallpaperManager.setResource(R.drawable.madina2);
                myCurrentImageName = "madina2";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("madina2")) {
            try {

                myWallpaperManager.setResource(R.drawable.kabaday1);
                myCurrentImageName = "kabaday1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("kabaday1")) {
            try {

                myWallpaperManager.setResource(R.drawable.uhud1);
                myCurrentImageName = "uhud1";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("uhud1")) {
            try {

                myWallpaperManager.setResource(R.drawable.bus);
                myCurrentImageName = "bus";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("bus")) {
            try {

                myWallpaperManager.setResource(R.drawable.muzdalifah);
                myCurrentImageName = "muzdalifah";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else if (myCurrentImageName.equals("muzdalifah")) {
            try {

                myWallpaperManager.setResource(R.drawable.tentcity);
                myCurrentImageName = "tentcity";

            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {

            try {
                myWallpaperManager.setResource(R.drawable.madina1);
                myCurrentImageName = "madina1";

            } catch (IOException e) {
                e.printStackTrace();
            }
        } // End if myCurrentImageName.equals("kabaday1").
    } // End if bln_checkbox_changing_is_activated == true.

    editor.putString("current_image", myCurrentImageName); // value to store
    editor.commit();
} // End method onReceive.

【问题讨论】:

    标签: android image scale android-wallpaper


    【解决方案1】:

    图像的渲染取决于以下几点:

    屏幕尺寸

    屏幕密度

    分辨率

    您最好完整阅读以下文档以了解您如何处理这种情况: Supporting Multiple Screens

    【讨论】:

    • 我阅读了链接中的文档,但它很混乱,但我确实看到了一些关于 9-patch png 文件的内容,所以我将尝试使用它来查看图像是否自动正确调整大小。
    • 我发现不支持 9-patch 作为壁纸,所以我想我需要另一种方法。 Android 附带此应用程序,可让您导入图像并从中创建壁纸。我希望我能更新他们用来使其工作的秘密,因为他们的应用程序会将图像缩放到正确的大小。
    【解决方案2】:

    myWallpaperManager 这个 imageView 应该是 fill_parent。 RU 是否为此提供了任何固定大小?

    【讨论】:

    • 没有固定大小,但我将编辑代码部分,以便您可以看到我用来更改壁纸的所有代码。
    【解决方案3】:

    添加以显示此权限<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/> <uses-permission android:name="android.permission.SET_WALLPAPER" />

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      相关资源
      最近更新 更多