Создание настраиваемого макета для настроек

Я пытаюсь создать собственный макет для управления настройками. Я знаю, что есть стандартный и рекомендуемый макет, предоставленный PreferenceActivity, но если я хочу добавить, скажем, кнопку, как мне это сделать?

Я планирую разработать приложение так, чтобы, когда пользователь касается определенного элемента на экране основной активности, он переходит в «подменю» параметров, которые пользователь может включить, который впоследствии появляется на следующем экране (он должен быть в этом Линейная прогрессия). Пользователь должен устанавливать их каждый раз, когда он использует приложение. В настоящее время я рассматриваю возможность использования стандартной PreferenceActivity для представления этого подменю параметров.

Может быть, это неправильный подход?

Редактировать: я не обратил внимания на решение, в то время как Googling. Как добавить кнопку в PreferenceScreen

Вы всегда можете создать пользовательский элемент макета предпочтений и использовать его в PreferenceActivity. Например, я сделал это:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical" android:paddingRight="?android:attr/scrollbarSize"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dip" android:layout_marginRight="6dip" android:layout_marginTop="6dip" android:layout_marginBottom="6dip" 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/textAppearanceLarge" 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_alignLeft="@android:id/title" android:textAppearance="?android:attr/textAppearanceSmall" android:maxLines="2" /> <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/go" android:layout_alignParentRight="true" /> </RelativeLayout> <!-- Preference should place its actual preference widget here. --> <LinearLayout android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="center_vertical" android:orientation="vertical" /> </LinearLayout> 

У него есть отходы, но в основном создает 2 строки (заголовок, субтитры) с изображением справа. Вы можете заменить ImageView на кнопку, и все будет готово. Затем вы устанавливаете макет для индивидуальных предпочтений в файле xml/prefs.xml следующим образом:

 <Preference android:title="@string/label_pref_version" android:key="@string/pref_version" android:layout="@layout/pref" /> 

После этого просто запустите findViewById в вашем коде активности и присоедините слушателя к кнопке. Возможно, вам придется сделать еще одну работу, если у вас есть несколько кнопок в Activity, но не должно быть необоснованным.

Исходный код можно найти здесь: https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/layout/preference.xml

Я планирую разработать приложение так, чтобы, когда пользователь касается определенного элемента на экране основной активности, он переходит в «подменю» параметров, которые пользователь может включить, который впоследствии появляется на следующем экране (он должен быть в этом Линейная прогрессия).

Это звучит как вложенный PreferenceScreen .