android - PreferenceFragmentCompat 在 PreferenceCategory 上有我无法摆脱的填充
问题描述
所以我一直在尝试使用 androidx.preference.PreferenceFragmentCompat 创建一个设置活动,并且一切正常。
但是由于某种原因,偏好类别和偏好本身都存在一些填充。我设法通过使用 app:iconSpaceReserved="false" 摆脱了首选项上的填充,但这似乎不适用于类别。
我已经尝试了所有各种主题,PreferenceThemeOverlay.v14.Material 等,但它们似乎没有什么不同
这是我的所有代码!
SettingsActivity.java
import android.os.Bundle;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = findViewById(R.id.settings_toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
}
}
}
活动设置.xml
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".SettingsActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/settings_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/ToolbarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_settings"
android:textColor="@color/font_dark_primary" />
</androidx.appcompat.widget.Toolbar>
<fragment
android:name="com.henrytwist8gmail.fullcart.SettingsTestFragment"
android:tag="settings_fragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/settings_toolbar" />
</androidx.constraintlayout.widget.ConstraintLayout>
SettingsTestFragment.java
import android.os.Bundle;
import androidx.preference.PreferenceFragmentCompat;
public class SettingsTestFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences_test, rootKey);
}
}
首选项_test.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="test" >
<Preference android:title="testPref" />
</PreferenceCategory>
</PreferenceScreen>
我的依赖是...
implementation 'com.google.android.material:material:1.0.0-beta01'
implementation 'androidx.preference:preference:1.0.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
解决方案
实际上有一个更好的 hack 来解决这个问题,还有资源覆盖:
创建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>
修复了all的<bool>
默认值;修复了.iconSpacePreserved
Preference
<dimen>
PreferenceCategory
编辑:如果您正在使用androidx.preference:preference:1.1.0-alpha01
或更高版本,则不需要preference_category_padding_start
修复,config_materialPreferenceIconSpaceReserved
只需足够。
推荐阅读
- php - 每年每月或每周如何分离数据
- python - 通过 OptionMenu 返回值
- frameworks - 在 Cognos 框架管理器中如何使用 excel 文件作为我的数据源
- java - 如何修复 android.os.FileUriExposedException:file:///storage/emulated/0/Documents/SM.pdf 通过 Intent.getData() 暴露在应用程序之外
- javascript - 如何在打字稿中创建一个复杂的对象
- vba - 如何对齐雪佛龙自选形状类型
- node.js - 节点中的 req.body 为空
- php - 访问类中的数据
- php - PHP中超过最大行数后如何附加另一个文件?
- java-web-start - 如何在 ubuntu 18.04 上使用 javaws 运行 CitNetExplorer.jnlp?