androidx.preference.PreferenceScreen 去除左边空白

本文提供两种方法去除Android中PreferenceScreen左侧空白:一是通过自定义资源文件调整配置参数;二是自定义BasePreferenceFragment覆盖默认行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

androidx.preference.PreferenceScreen 去除左边空白

方法一:

新建res/values-sw360dp-v13/values-preference.xml文件
插入
内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <bool name="config_materialPreferenceIconSpaceReserved" tools:ignore="MissingDefaultResource,PrivateResource">false</bool>
    <dimen name="preference_category_padding_start" tools:ignore="MissingDefaultResource,PrivateResource">0dp</dimen>
</resources>

即可。

方法二:

自定义现实抽象类覆盖方法:


import android.annotation.SuppressLint
import androidx.preference.*
import androidx.recyclerview.widget.RecyclerView

abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
    private fun setAllPreferencesToAvoidHavingExtraSpace(preference: Preference) {
        preference.isIconSpaceReserved = false
        if (preference is PreferenceGroup)
            for (i in 0 until preference.preferenceCount)
                setAllPreferencesToAvoidHavingExtraSpace(preference.getPreference(i))
    }

    override fun setPreferenceScreen(preferenceScreen: PreferenceScreen?) {
        if (preferenceScreen != null)
            setAllPreferencesToAvoidHavingExtraSpace(preferenceScreen)
        super.setPreferenceScreen(preferenceScreen)

    }

    override fun onCreateAdapter(preferenceScreen: PreferenceScreen?): RecyclerView.Adapter<*> =
            object : PreferenceGroupAdapter(preferenceScreen) {
                @SuppressLint("RestrictedApi")
                override fun onPreferenceHierarchyChange(preference: Preference?) {
                    if (preference != null)
                        setAllPreferencesToAvoidHavingExtraSpace(preference)
                    super.onPreferenceHierarchyChange(preference)
                }
            }
}

继承此方法即可

package com.android.settings.deviceinfo; import android.content.Context; import android.text.TextUtils; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.core.AbstractPreferenceController; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Collections; import java.util.List; public class EthernetMacAddressPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin { private static final String KEY_ETHERNET_MAC_ADDRESS = "ethernet_mac_address"; public EthernetMacAddressPreferenceController(Context context) { super(context); } @Override public String getPreferenceKey() { return KEY_ETHERNET_MAC_ADDRESS; } @Override public boolean isAvailable() { return mContext.getResources().getBoolean(R.bool.config_show_ethernet_mac_address); } @Override public void updateState(Preference preference) { super.updateState(preference); preference.setSummary(getEthernetMacAddress()); } private String getEthernetMacAddress() { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { if (intf.getName().equalsIgnoreCase("eth0")) { // 通常以太网接口名为 "eth0" byte[] macBytes = intf.getHardwareAddress(); if (macBytes != null) { StringBuilder macBuilder = new StringBuilder(); for (byte b : macBytes) { macBuilder.append(String.format("%02X:", b)); } if (macBuilder.length() > 0) { macBuilder.deleteCharAt(macBuilder.length() - 1); } return macBuilder.toString(); } } } } catch (SocketException e) { e.printStackTrace(); } return mContext.getString(R.string.device_info_default); } }修改后得完整代码是
03-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值