maotoumao / MusicFree

插件化、定制化、无广告的免费音乐播放器
http://musicfree.upup.fun/
GNU General Public License v3.0
6.52k stars 513 forks source link

更佳适用于平板的布局 #217

Open akers4238 opened 1 month ago

akers4238 commented 1 month ago

注意事项


需求描述 请详细描述一下需求场景,以及可能导致的问题;以及你预期的解决方案或效果 如图一_202405030903_46047 1.jpg

一_202405030903_47543 2.jpg

问题可能有加载异常,卡片死机

替代方案 一_202405030903_46047 1.jpg

基本成这样就行

其他信息 通过获取屏幕dpi大小来判定是否切换为平板布局


// 获取屏幕宽度和高度
public static int getDeviceWidth(Context context) {
    return context.getResources().getDisplayMetrics().widthPixels;
}

public static int getDeviceHeight(Context context) {
    return context.getResources().getDisplayMetrics().heightPixels;
}

// 获取屏幕密度
public static int getScreenDensity(Context context) {
    return context.getResources().getDisplayMetrics().densityDpi;
}

// 计算屏幕尺寸(对角线,单位为英寸)
public static double getScreenInches(Context context) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int widthPixels = metrics.widthPixels;
    int heightPixels = metrics.heightPixels;
    double screenInches = Math.sqrt(Math.pow(widthPixels / metrics.xdpi, 2) 
                                   + Math.pow(heightPixels / metrics.ydpi, 2));
    return screenInches;
}
可以简单设置两个布局,利用开屏的时间来检测一下屏幕dpi,达到560时开启第二个布局
在Java中,特别是在Android开发环境下,根据DPI(dots per inch,每英寸点数)来切换加载布局的情况并不常见,因为DPI通常是固定的,并且不会在应用运行时改变。然而,如果你想要根据DPI来改变布局或者资源,你可以在XML布局文件中使用`sw600dp`、`sw720dp`等 qualifiers 来为不同尺寸的屏幕定义不同的布局。
不过,如果你需要在Java代码中根据DPI来决定是否切换布局,以下是一个简单的示例,展示如何在Android应用中根据DPI值来执行特定逻辑:

```java
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.DisplayMetrics;
import android.util.DisplayMetrics;

public class DpiDependentLayoutSwitcher {

    public static boolean shouldLoadDifferentLayout(Context context) {
        // 获取当前屏幕的DPI
        DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
        final int dpi = displayMetrics.densityDpi;

        // 检查DPI是否等于560,如果相等则返回true,表示需要加载不同的布局
        return dpi == 560;
    }

    // 这个方法可以被Activity中的onCreate或其他适当位置调用
    public static void loadLayout(Context context) {
        if (shouldLoadDifferentLayout(context)) {
            // 加载为DPI=560特别设计的布局
            // 例如:setContentView(R.layout.your_special_layout_for_dpi_560);
            System.out.println("Loading special layout for DPI 560");
        } else {
            // 加载默认布局
            // 例如:setContentView(R.layout.your_default_layout);
            System.out.println("Loading default layout");
        }
    }
}
代码来源
by:kimi.ai
akers4238 commented 1 month ago

歌单展开界面可以增多一点,现在就7个满屏了