在Settings的一级菜单中增加一个选项

发布于:2025-05-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

top_level_settings.xml中添加

<com.android.settings.widget.HomepagePreference
    android:fragment="com.android.settings.network.NetworkSettingsFragment"
    android:icon="@drawable/ist_ic_settings_wireless"
    android:key="top_level_network_settings"
    android:order="-150"
    android:title="@string/network_settings_title"
    android:summary="@string/network_settings_summary"
    settings:controller="com.android.settings.network.TopLevelNetworkSettingsPreferenceController"/>

TopLevelAdvancedPreferenceController:控制是否显示

public class TopLevelAdvancedPreferenceController extends AbstractPreferenceController {

    public TopLevelAdvancedPreferenceController(Context context) {
        super(context);
    }

    @Override
    public boolean isAvailable() {
        // 判断是否显示该设置项
        return true; // 一直可用
    }

    @Override
    public String getPreferenceKey() {
        return "top_level_advanced";
    }
}

NetworkSettingsFragment:点进去的fragment页面

public class NetworkSettingsFragment extends DashboardFragment {

    @Override
    protected String getLogTag() {
        return "NetworkSettings";
    }

    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.network_settings; // 对应的 XML 布局文件
    }

    @Override
    public int getMetricsCategory() {
        return SettingsEnums.PAGE_ID_NETWORK_SETTINGS;
    }


//createPreferenceControllers(Context)
//创建并返回与每个 Preference Key 对应的 !!!AbstractPreferenceController 实例!!!
    @Override
    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
        return NetworkPreferenceControllerHelper.getControllers(context);
    }
}

Helper:一般是获取数据类

public class NetworkPreferenceControllerHelper {

    public static List<AbstractPreferenceController> getControllers(Context context) {
        List<AbstractPreferenceController> controllers = new ArrayList<>();
        controllers.add(new WifiPreferenceController(context, "wifi_toggle"));
        controllers.add(new MobileDataPreferenceController(context, "mobile_data_toggle"));
        controllers.add(new AirplaneModePreferenceController(context, "airplane_mode_toggle"));
        return controllers;
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到