Intereting Posts
Добавить и удалить вид из макета «TransformerException: ожидался шаг местоположения» в android xpath Расписание уведомления с помощью диспетчера аварийных сигналов в форматах xamarin для Android Парольный вход с использованием openID в android Существует ли приемлемый кросс-платформенный метод для отображения цифровой клавиатуры в стандартных веб-формах на сенсорном устройстве? Как предоставить файлы данных для тестов на андроид Android: Пользовательская автономная карта с использованием изображения Существенное развитие Android в Scala Как повторить звук звонка Обновление виджета приложения с помощью AlarmManager FloatingActionButton в фрагменте, спрятанном на панели инструментов Как заблокировать всплывающее меню при нажатии на флажок Android 4.3 с Genymotion uvesafb: не удалось выполнить / sbin / v86d Задача Gradle zipAlign не работает? Android. Выбор пользовательского намерения

Android: Как удалить маркер / дополнение в Экран предпочтений

Мне приходится сталкиваться с очень странной проблемой при проектировании экрана предпочтений. Хотя я не даю разницы в макете, он оставляет некоторое пространство слева.

Как вы можете видеть на изображении ниже: Введите описание изображения здесь

XML:

<PreferenceScreen android:title="demo" > <CheckBoxPreference android:defaultValue="false" android:key="prefSync"` android:title="Auto Sync" /> </PreferenceScreen> 

Я делаю что-то неправильно, добавляя предпочтение check-box на экране?

Solutions Collecting From Web of "Android: Как удалить маркер / дополнение в Экран предпочтений"

Попробуй это:

 @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 в PreferenceScreen содержащем ваши настройки. Если вы используете PreferenceFragment для создания своих настроек, просто перейдите в функцию onActivityCreated из PreferenceFragement и выполните следующие действия, чтобы удалить дополнение:

 public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); View lv = getView().findViewById(android.R.id.list); if (lv != null) lv.setPadding(0, 0, 0, 0); } 

Compile 'com.android.support:preference-v7:24.2.1'

Использование PreferenceFragmentCompat может сделать это:

1. Определите группу предпочтений:

  static class CustomAdapter extends PreferenceGroupAdapter { public CustomAdapter(PreferenceGroup preferenceGroup) { super(preferenceGroup); } @Override public PreferenceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { PreferenceViewHolder preferenceViewHolder = super.onCreateViewHolder(parent, viewType); parent.setPadding(0, 0, 0, 0); preferenceViewHolder.itemView.setPadding(20, 5, 20, 5); return preferenceViewHolder; } } 

2.Override PreferenceFragmentCompat's onCreateAdapter метод:

  @Override protected Adapter onCreateAdapter(PreferenceScreen preferenceScreen) { return new CustomAdapter(preferenceScreen); } 

Использование style.xml может сделать это:

1.values ​​/ styles.xml:

  <style name="customPreferenceThemeOverlay" parent="@style/PreferenceThemeOverlay"> <item name="preferenceFragmentListStyle">@style/customPreferenceFragmentList</item> </style> <style name="customPreferenceFragmentList"> <item name="android:paddingLeft">0dp</item> <item name="android:paddingRight">0dp</item> </style> 

2.values-v17 / styles.xml:

  <style name="customPreferenceFragmentList"> <item name="android:paddingLeft">0dp</item> <item name="android:paddingRight">0dp</item> <item name="android:paddingStart">0dp</item> <item name="android:paddingEnd">0dp</item> </style> 

3.value / styles.xml:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> ... ... <item name="preferenceTheme">@style/customPreferenceThemeOverlay</item> </style> 

К сожалению, ничто из этого не работало для меня.

Короткий ответ :

Я решил это, используя отрицательные поля в самом верхнем контейнере пользовательской настройки предпочтений.

шаги:

  • Создайте пользовательский макет для предпочтения (например, preference_category.xml)
  • Укажите, что ваше предпочтение использует настраиваемый макет, добавив параметр android: layout к тегу предпочтений в XML
  • Применить отрицательные поля

Подробный ответ:

Предпочтение XML:

  <android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/settings_title" > <android.support.v7.preference.PreferenceCategory android:layout="@layout/preference_category" android:key="settings_list" android:title="@string/pref_category_settings" /> <android.support.v7.preference.SwitchPreferenceCompat android:layout="@layout/preference_row" android:icon="@drawable/ic_nav_switch" android:key="pref_switch" android:title="@string/pref_switch_title" /> </android.support.v7.preference.PreferenceScreen> 

Пользовательский макет для строки предпочтений, который удаляет ненужные левые и правые поля:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="-12dp" android:layout_marginEnd="-8dp" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@android:id/icon" android:layout_width="58dp" android:layout_height="58dp" android:padding="8dp" android:layout_gravity="center" android:visibility="visible" /> </RelativeLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="15dp" android:layout_marginEnd="6dp" android:layout_marginTop="6dp" android:layout_marginBottom="6dp" android:layout_weight="1"> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceListItem" android:ellipsize="marquee" android:fadingEdge="horizontal" /> <TextView android:id="@android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignStart="@android:id/title" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" android:maxLines="2"/> </RelativeLayout> <LinearLayout android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="end|center_vertical" android:orientation="vertical"> </LinearLayout> </LinearLayout> 

Пользовательский макет для категории предпочтений, который удаляет ненужные левые и правые поля:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/colorAccent" android:textStyle="bold" android:textSize="12sp" android:gravity="center_vertical" android:textAllCaps="true" android:layout_marginStart="-4dp" android:layout_marginEnd="-8dp" android:id="@+android:id/title" /> 

«Заполнение» инициируется в PreferenceFrameLayout.java :

 public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0); float density = context.getResources().getDisplayMetrics().density; int defaultBorderTop = (int) (density * DEFAULT_BORDER_TOP + 0.5f); int defaultBottomPadding = (int) (density * DEFAULT_BORDER_BOTTOM + 0.5f); int defaultLeftPadding = (int) (density * DEFAULT_BORDER_LEFT + 0.5f); int defaultRightPadding = (int) (density * DEFAULT_BORDER_RIGHT + 0.5f); mBorderTop = a.getDimensionPixelSize( com.android.internal.R.styleable.PreferenceFrameLayout_borderTop, defaultBorderTop); mBorderBottom = a.getDimensionPixelSize( com.android.internal.R.styleable.PreferenceFrameLayout_borderBottom, defaultBottomPadding); mBorderLeft = a.getDimensionPixelSize( com.android.internal.R.styleable.PreferenceFrameLayout_borderLeft, defaultLeftPadding); mBorderRight = a.getDimensionPixelSize( com.android.internal.R.styleable.PreferenceFrameLayout_borderRight, defaultRightPadding); a.recycle(); } 

Если вы знаете, как переопределить стили, определенные Android, вы, вероятно, можете решить эту проблему. Однако это не очень просто.

Я пытаюсь использовать

 android:icon="@null" 

С CheckBoxPreference в Android 4.4, но не может дополнять слева. Я обманул использование небольшого прозрачного значка и добавил

 android:icon="@drawable/transparent_icon" 

И, похоже, для меня это работает. Надеюсь, это поможет. Благодарю.

Я не знаю, было ли слишком поздно для ответа, но сегодня у меня была такая же проблема, и ничто из этого ответа не помогло мне.

Поэтому я использовал это решение:

В моей версии DisclaimerPreference которая extends Preference , я оборачиваю метод onBindView(View view) следующим образом:

  @Override protected void onBindView(View view) { super.onBindView(view); if(view instanceof ViewGroup){ ViewGroup vg = (ViewGroup)view; View currView; for(int i=0; i<vg.getChildCount(); i++){ currView = vg.getChildAt(i); if (currView instanceof RelativeLayout) currView.setVisibility(View.GONE); } } } 

Ключ должен установить RelativeLayout внутри основного представления как GONE . Пожалуйста, дайте мне знать, если что-то не так 🙂

По-видимому, добавление android:layout="@null" к вашему предпочтению в xml могло бы сделать трюк. Но, следовательно, он также сделает размер заголовка более крупным.

Это поздний ответ, но попробуйте установить android: icon = "@ null" в CheckBoxPreferences:

 <CheckBoxPreference ... android:icon="@null" /> 

Добавьте android:defaultValue="false" в ваш <PreferenceScreen [...] :

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:defaultValue="false">