だから、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);
}
}
}
activity_settings.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);
}
}
preferences_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'
ご協力いただきありがとうございます。
実際には、これを修正するためのより良いハックがあり、リソースのオーバーライドもあります:
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>
<bool>
は、すべてのiconSpacePreserved
のPreference
のデフォルト値を修正します。 <dimen>
はPreferenceCategory
を修正します。
編集:androidx.preference:preference:1.1.0-alpha01
以上を使用している場合、preference_category_padding_start
修正は不要で、config_materialPreferenceIconSpaceReserved
のみで十分です。
スタイルの回避策で解決しました。 PreferenceCategoryで動作します。
設定には、app:iconSpaceReserved = "false"を使用します。
[styles.xml]
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="preferenceTheme">@style/AppPreferenceTheme</item>
</style>
<style name="AppPreferenceTheme" parent="@style/PreferenceThemeOverlay.v14.Material">
<item name="preferenceCategoryStyle">@style/FixForPreferenceCategoryStyle</item>
<!-- <item name="Android:textColor">#ffffffff</item> -->
<!-- <item name="Android:textColorSecondary">#b3ffffff</item> -->
<!--when the check box is checked-->
<!--<item name="colorControlNormal">#FF4081</item>-->
<!--when the check box is unchecked -->
<!--<item name="colorControlActivated">#81FF40</item>-->
</style>
<style name="FixForPreferenceCategoryStyle" parent="@style/Preference.Category.Material">
<item name="Android:layout">@layout/_preference_category_material</item>
</style>
<color name="_preference_fallback_accent_color">@color/colorAccent</color>
[_ preference_category_material.xml]「@ layout/preference_category_material」からコピー。
@ dimen/preference_category_padding_startをAndroid:paddingLeft = "0dp"に置き換えます。カスタムカラー@ color/_preference_fallback_accent_colorを追加します。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="8dp"
Android:layout_marginTop="8dp"
Android:layout_marginLeft="?android:attr/listPreferredItemPaddingLeft">
<LinearLayout
Android:id="@+id/icon_frame"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="start|center_vertical"
Android:orientation="horizontal">
<Android.support.v7.internal.widget.PreferenceImageView
Android:id="@Android:id/icon"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:maxHeight="18dp"
app:maxWidth="18dp"/>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:paddingLeft="0dp"><!-- SET to 0dp -->
<!--Android:paddingLeft="@dimen/preference_category_padding_start"-->
<TextView
Android:id="@Android:id/title"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="16dp"
Android:paddingRight="?android:attr/listPreferredItemPaddingRight"
Android:textAlignment="viewStart"
Android:textColor="@color/_preference_fallback_accent_color"/>
<TextView
Android:id="@Android:id/summary"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:ellipsize="end"
Android:singleLine="true"
Android:textColor="?android:attr/textColorSecondary"/>
</LinearLayout>
</FrameLayout>
修正は現在アルファ版でリリースされています。使用できます
implementation 'androidx.preference:preference:1.1.0-alpha01'
または、build.gradleの最新リリース
AndroidXを使用する場合、次の属性をXMLのPreferencesおよびPreference Categoriesに追加するだけで、余分なパディングを追加/削除できます。
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.Android.com/apk/res-auto">
<Preference
...
app:iconSpaceReserved="true/false"
.../>
</androidx.preference.PreferenceScreen>
true
はパディングを追加し、false
はそれを削除します。