Установить пользовательскую строку заголовка в PreferenceAcctivity - PullRequest
6 голосов
/ 07 февраля 2011

Я использую PreferenceActivity, как я могу установить пользовательскую строку заголовка? Не только текст, но и цвет фона, размер - весь макет.

Ответы [ 6 ]

11 голосов
/ 28 февраля 2012

PreferenceActivity extends ListActivity, и когда вы увеличиваете предпочтения из xml с помощью addPreferencesFromResource(), он помещает материал в стандарт ListView, который используется ListActivity.

Таким образом, вы можете использовать setContentView() для указания макета, но вам нужно иметь ListView с идентификатором "@+android:id/list".

Итак, используя пример кода Кляйни:

protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.login_settings);
    setContentView(R.layout.login_settings_layout);
}

Вам потребуется ListView в login_settings_layout.xml, который выглядит примерно так:

<ListView 
    android:id="@+android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    /> 
1 голос
/ 12 августа 2013

Это единственное, что сработало для меня.Остальные вышеперечисленные вещи не принесли желаемых результатов на моем планшете Nexus 4.3.

Я действительно не смог воссоздать правильную панель действий, такую ​​как виджет, но смог поместить большой заголовок «Настройки» поверх PreferenceActivity, с помощью следующих шагов.

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

  1. В классе PreferenceActivity (удалить существующую заголовок)

    public class Settings extends PreferenceActivity· {
      ...
      @Override
      public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE); // This goes first
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);
    
  2. В Res / XML/settings.xml, я хотел бы обратить внимание на первую категорию предпочтений

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    
       <PreferenceCategory
          android:layout="@layout/settings_titlebar" />
    
       <PreferenceCategory android:title="Notifications">
          <Preference .....
    
  3. В res / layout / settings_titlebar.xml

Navals-MacBook-Pro: ver_ui_0.2 Naval $ vi res / layout / settings_titlebar.xml

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:background="@drawable/header_background"
     android:enabled="false">

     <TextView android:src="@drawable/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:background="@android:color/transparent"
        android:padding="4dip"
        android:text="Settings"
        android:textSize="32sp"
        />

   </RelativeLayout>
1 голос
/ 03 июня 2012

Метод Бена хорошо сработал для меня !! Вот код

public class PreferenceCustomTitleActivity extends PreferenceActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preference);

    /** Customize your background, textsize, cachetint, dividers
        for your list view in the xml **/
    setContentView(R.layout.layout_with_simple_listview_only);

    ListView list = (ListView) findViewById(android.R.id.list);

    View preferenceHeader = getLayoutInflater().inflate(
            R.layout.preference_header, null);
    list.addHeaderView(preferenceHeader);
}

}

1 голос
/ 07 февраля 2011
public class Preferences extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
}
}
0 голосов
/ 21 мая 2012

Или вот так:

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    super.onCreate(savedInstanceState);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar); 
    addPreferencesFromResource(R.xml.preferences);
}

С файлом customtitlebar.xml вот так:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/customTitleBar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    style="@style/CustomWindowTitle">
</TextView>
0 голосов
/ 04 мая 2011

Круто, отлично работало для "NO_TITLE":

protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.login_settings);
    setContentView(R.layout.login_settings_layout);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...