Android 安卓:如何最大化偏好片段宽度(或去除边距)?
如果您查看Android设置截图或截图,PreferenceFragment中有空白。你怎样才能摆脱它Android 安卓:如何最大化偏好片段宽度(或去除边距)?,android,preference,Android,Preference,如果您查看Android设置截图或截图,PreferenceFragment中有空白。你怎样才能摆脱它 我尝试使用PreferenceFragment width来填充父对象,但没有成功。最后,我找到了解决方法 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreat
我尝试使用PreferenceFragment width来填充父对象,但没有成功。最后,我找到了解决方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, savedInstanceState);
if(v != null) {
ListView lv = (ListView) v.findViewById(android.R.id.list);
lv.setPadding(10, 10, 10, 10);
}
return v;
}
您可以使用以下命令设置填充:setPadding() 这只是一个补充;接受的答案对我不起作用,因为
ListView
本身没有任何填充设置,它是在父视图上设置的(通常是LinearLayout
)。因此,有必要采取以下措施:
ListView lv = (ListView) findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 0, 0, 0);
这是我在onResume覆盖中所做的:
// Fix PreferenceFragment's padding...
int paddingSize = 0;
if (Build.VERSION.SDK_INT < 14)
{
paddingSize = (int) (-32 * CLS_Gfx.scale);
}
else
{
paddingSize = (int) (-16 * CLS_Gfx.scale);
}
final View v = getView();
v.setPadding(paddingSize, 0, paddingSize, 0);
//修复PreferenceFragment的填充。。。
int paddingSize=0;
如果(Build.VERSION.SDK_INT<14)
{
填充大小=(int)(-32*CLS\Gfx.scale);
}
其他的
{
填充尺寸=(整数)(-16*CLS\Gfx.scale);
}
最终视图v=getView();
v、 设置填充(填充大小,0,填充大小,0);
getListView().setPadding(左、上、右、下)
确保在创建视图后调用它(而不是onCreate
)
请记住,传入的
int
以像素为单位,而不是dp
。要从dp转换为像素,请参见。另一个选项是设置您自己的适配器。
这样,您就有了更大的灵活性,而且它对更改更具鲁棒性
请参见有更优雅的解决方案,至少对于PreferenceFragmentCompat,可以定义主题中的填充。假设我们的活动设置为android:theme=“@style/PreferenceTheme”
@样式/我的首选项最小覆盖
@样式/MyPreferenceFragmentListStyle
0dp
0dp
当您使用片段执行首选项活动时,以下是我使用的解决方案:
public class T2DPreferenceActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
new T2DPreferenceFragment()).commit();
}
public static class T2DPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.server_screen_preference);
}
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListView lv = (ListView)view.findViewById(android.R.id.list);
ViewGroup parent = (ViewGroup)lv.getParent();
parent.setPadding(0, 100, 0, 0);
}
}
}这里的答案对我来说不合适。然而,这一次:
资料来源:
在您的首选项屏幕中添加以下行:
xmlns:app="http://schemas.android.com/apk/res-auto"
在PreferenceScreen及其元素中添加此行:
app:iconSpaceReserved="false"
例如:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
app:iconSpaceReserved="false"
xmlns:app="http://schemas.android.com/apk/res-auto">
<CheckBoxPreference
app:iconSpaceReserved="false"
android:defaultValue="false"
android:key="key1"
android:title="title1" />
<SwitchPreference
app:iconSpaceReserved="false"
android:defaultValue="false"
android:key="@string/pref_wakeup"
android:title="key2" />
</PreferenceScreen>
hey@jclova,我和urs面临着同样的问题。这里是它的链接:实际上我并没有为首选屏幕创建任何自定义布局。只需在布局中使用checkboxpreference,尽管它会将任何边距设置为左侧。你知道我哪里出了问题吗?请帮忙。记住填充量是Px。在xml中设置任何覆盖方法之前,您可能希望将它们从dp转换为px。对我来说,“v”总是返回null(super.onCreateView(…)在Android 4.3中工作得非常完美,我准备忘记它。这是唯一对我有效的答案。我在我的PreferenceActivity
的onCreate()
方法中调用了它。添加lv.setPadding(0,0,0,0)不是更好吗代码>?对我来说@jclova的答案确实有效,但我将设置lv
和lv.getParent()
,以处理未经测试的设备。谢谢你。这对我来说非常有效。即使是android:icon=“@null”也没有做任何更改,但您的解决方案仍然有效。非常感谢您提供的伟大解决方案。我认为这应该是一个公认的答案。@Smeet我很高兴它帮助了你!否决投票时没有评论?这里回答了类似的问题:这对我不起作用。使用PreferenceFragmentCompat时仍然可以看到填充。此外,我没有收到任何警告或错误,但甚至不存在(自动完成不工作)@qkx事实上自动完成不工作并不意味着属性不存在<代码>首选项主题
属性不存在()。所以,您很可能在安装过程中遇到了一些问题(可能是支持库或其版本?),我使用的是最新版本(28.0.0),我复制粘贴了您的代码并应用了这种样式。它真的根本不起作用:)而且它不能——因为问题不是填充,问题是compat首选项总是为图标保留间距。这是问题的根源,而不是填充。因此,您必须将PreserveConspacing设置为false——但在代码中,通过编程(在xml中,它不起作用)。这是一个真正的解决方案:)我在其他一些问题上也找到了它,我可以确认它工作得很好。好吧,它不工作,但它仍然对我和至少2个投票率较高的用户有效;)您复制粘贴了解决方案,但没有复制粘贴的设置,因此我的评论仍然适用:我们可能有不同的设置,这就是为什么它对我有效,但对您无效。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
app:iconSpaceReserved="false"
xmlns:app="http://schemas.android.com/apk/res-auto">
<CheckBoxPreference
app:iconSpaceReserved="false"
android:defaultValue="false"
android:key="key1"
android:title="title1" />
<SwitchPreference
app:iconSpaceReserved="false"
android:defaultValue="false"
android:key="@string/pref_wakeup"
android:title="key2" />
</PreferenceScreen>