我在设计偏好屏幕时遇到了非常奇怪的问题.虽然我没有给出任何布局余量,但是左边留有一些空间.
如下图所示:

XML:
<PreferenceScreen android:title="demo" >
<CheckBoxPreference
android:defaultValue="false"
android:key="prefSync"`
android:title="Auto Sync" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我在屏幕上添加复选框首选项时做错了什么?
由于不推荐使用PreferenceFragment,因此我使用PreferenceFragmentCompat.
缩进很可能是因为图标而出现,但我不使用它们(默认是没有图标).
我试图将图标属性设置为android:icon="@null"或android:color/transparent,但它没有帮助.
替换片段的功能:
private fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_layout, fragment)
.commit()
}
Run Code Online (Sandbox Code Playgroud)
content_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/app_bar_main">
<FrameLayout
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我的设置片段:
class SettingsFragment : PreferenceFragmentCompat() {
companion object {
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener { preference, value ->
val stringValue = value.toString()
if (preference is ListPreference) …Run Code Online (Sandbox Code Playgroud) 我正在使用PreferenceFragmentCompat,但我不认为它的风格正确.
首选项的标题似乎很大,PreferenceCategory文本是不可读的,整个想法似乎是关闭.
这就是我在theme.xml中的内容
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
<style name="PreferenceThemeOverlay">
<item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
<item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
<item name="preferenceCategoryStyle">@style/Preference.Category</item>
<item name="preferenceStyle">@style/Preference</item>
<item name="preferenceInformationStyle">@style/Preference.Information</item>
<item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
<item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
<item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
<item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference
</item>
<item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>
Run Code Online (Sandbox Code Playgroud) android android-appcompat android-support-library android-settings
将 SDK 更新到版本 28 (Android Pie) 后,我在首选项屏幕的布局方面遇到了问题。每个 PreferenceScreen 在左侧都有一个新的填充。
正如我所检查的,已经有一种方法可以将图标空间设置为 Preference 类中的保留空间。
android.support.v7.preference.Preference.setIconSpaceReserved(boolean iconSpaceReserved)
Run Code Online (Sandbox Code Playgroud)
到目前为止,该方法很好,但问题是它不适用于 PreferenceCategory。
这是否意味着 PreferenceCategory 的左侧填充不是图标空间?
android android-preferences android-layout android-support-library
我从第27版到第28版更新了com.android.support:preference库,自从我这样做以来,每个首选项左侧都有大量的填充.它几乎就像假设那里会有图标,但我没有指定图标.见下面的截图.有没有办法摆脱这种填充?
我已经迁移到 androidx.* 库,其中之一是新的首选项库:
androidx.preference:preference:1.1.0-alpha01- 它的最新版本。
如发行说明中 所述,iconSpaceReserved属性与 PreferenceCategories 无法正常工作已修复。
但看起来它默认设置为true。
我已经构建了演示项目来测试它。
首选项片段
import androidx.preference.PreferenceFragmentCompat;
public class SetttingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
}
}
Run Code Online (Sandbox Code Playgroud)
首选项.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory android:title="Category 1">
<Preference
android:key="pref1"
android:title="Preference 1" />
<Preference
android:key="pref2"
android:title="Preference 2" />
</PreferenceCategory>
<PreferenceCategory
android:title="Category 2"
app:iconSpaceReserved="false">
<Preference
android:key="pref3"
android:title="Preference 3" />
<Preference
android:key="pref4"
android:title="Preference 4"
app:iconSpaceReserved="false" />
</PreferenceCategory>
...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
首选项主题根据需要设置。
样式文件
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
Run Code Online (Sandbox Code Playgroud)
截屏
当app:iconSpaceReserved=false …