Quiero añadir ToolBar en PreferenceActivity en mi aplicación android. Yo escribí el siguiente código.

  public class SettingsActivity extends PreferenceActivity  {
 SendSMS sms;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    android.support.v7.widget.Toolbar bar = (android.support.v7.widget.Toolbar) LayoutInflater.from(this).inflate(R.layout.action_bar_setting, root, false);
    root.addView(bar, 0);
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

}

Esta funcionado perfectamente en mi android Kitkat teléfono API 19 pero la fuerza de cerrado en la API de nivel 10, es decir, de pan de jengibre. Por favor, me sugieren.

OriginalEl autor Tek Raj | 2015-05-09

7 Comentarios

  1. 33

    Usted necesita un diseño que contenga un Toolbar, y un ListView con android:id="@android:id/list"

    activity_settings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@id/content_frame"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@id/toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary" />
        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    SettingsActivity.java

    public class SettingsActivity extends PreferenceActivity {
    
        private AppCompatDelegate mDelegate;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            getDelegate().installViewFactory();
            getDelegate().onCreate(savedInstanceState);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_settings);
            setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
            addPreferencesFromResource(R.xml.preferences);
            ...
        }
    
        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            getDelegate().onPostCreate(savedInstanceState);
        }
    
        @Override
        public void setContentView(@LayoutRes int layoutResID) {
            getDelegate().setContentView(layoutResID);
        }
    
        @Override
        protected void onPostResume() {
            super.onPostResume();
            getDelegate().onPostResume();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            getDelegate().onStop();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            getDelegate().onDestroy();
        }
    
        private void setSupportActionBar(@Nullable Toolbar toolbar) {
            getDelegate().setSupportActionBar(toolbar);
        }
    
        private AppCompatDelegate getDelegate() {
            if (mDelegate == null) {
                mDelegate = AppCompatDelegate.create(this, null);
            }
            return mDelegate;
        }
        ...
    }

    Echa un vistazo a mi completamente de trabajo de ejemplo:

    De referencia desde el Android equipo: AppCompatPreferenceActivity

    Hidro, ¿por qué a las necesidades de diseño de un control ListView?
    PreferenceActivity requiere un ListView con android:id/list en el diseño, si se anula la disposición, que es la razón.
    Ahora yo podría hacer el trabajo. Gracias, @hidro, para su explicación.
    no me funciona… no se muestra la barra de herramientas, pero su virtud de la preferencia de diseño.
    En Android 4.4 estoy perdiendo rellenos de la lista, por lo que la actividad no se parece a los nativos.

    OriginalEl autor hidro

  2. 8

    Tratar:

    public class SettingsActivity extends AppCompatPreferenceActivity {
    .....
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupActionBar();
        /* getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new GeneralPreferenceFragment())
                .commit();
        */
    
        //addPreferencesFromResource(R.xml.pref_general);        
    }
    
    private void setupActionBar() {
        ViewGroup rootView = (ViewGroup)findViewById(R.id.action_bar_root); //id from appcompat
    
        if (rootView != null) {
            View view = getLayoutInflater().inflate(R.layout.app_bar_layout, rootView, false);
            rootView.addView(view, 0);
    
            Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
        }
    
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            //Show the Up button in the action bar.
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }

    app_bar_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.AppBarLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
    </android.support.design.widget.AppBarLayout>
    ¿Qué es AppCompatPreferenceActivity ?
    es una Clase que extienda la Preferencia de Actividad. La ‘nueva’ -> Configuración de la Actividad » va a hacer que se vean.
    Qué tienes en @style/AppTheme.AppBarOverlay y @style/AppTheme.PopupOverlay archivos?

    OriginalEl autor ilw

  3. 3

    Usted puede agregar fácilmente la barra de herramientas de @android:style/Theme.Material.Light.DarkActionBar

    En AndroidManifest.xml :

    <activity
        android:name=".activity.SettingsActivity"
        android:theme="@style/SettingsTheme"
        android:label="Settings"/>

    En v21/styles.xml

    <style name="SettingsTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>

    En v14/styles.xml para el Regreso de la API de apoyo

    <style name="SettingsTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/ActionBar.V14.Movie.NoTitle</item>

    OriginalEl autor opticod

  4. 2

    Muy fácil y funciona bien en mi caso inflando barra de herramientas personalizada.
    En el código java para hacer de la siguiente,

       public class SettingsPrefActivity extends AppCompatPreferenceActivity {
            // private static final String TAG = SettingsPrefActivity.class.getSimpleName();
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
    
                //setting up toolbar
                getLayoutInflater().inflate(R.layout.toolbar_setting, (ViewGroup) findViewById(android.R.id.content));
                Toolbar toolbar = findViewById(R.id.toolbar);
                toolbar.setTitle("Settings");
                setSupportActionBars(toolbar);
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
                //load settings fragment
                getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
            }
    
        }

    y en el xml de código,agregue una categoría de preferencia en la parte superior hacer a continuación,

      <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    //put below line at the top of your xml preference layout screen..
        <PreferenceCategory android:layout="@layout/toolbar_setting"></PreferenceCategory>

    y en el diseño de la carpeta de recursos toolbar_setting,

       <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:local="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:elevation="@dimen/appbar_elevation"
        android:minHeight="?attr/actionBarSize"
        android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    OriginalEl autor Hiren

  5. 1

    Llego tarde, pero aquí está un pequeño fix para el problema en lugar de escribir toneladas de código o la adición de voluminosas bibliotecas.

    Ir a AndroidManifest.xml y a su Preferencia de Actividad agregar la costumbre theme

     <activity
            android:name=".Dashboard.PreferencepActivity"
            android:label="@string/title_activity_preference"
            android:theme="@style/Pref"></activity>

    Aquí está el tema personalizado a las mencionadas @style/Pref

     <style name="Pref" parent="Theme.AppCompat.DayNight.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    Espero que ayude!

    OriginalEl autor silverFoxA

  6. 0

    Lugar de:

    public class PreferencesActivity extends Activity

    Hacer esto:

    public class PreferencesActivity extends AppCompatActivity

    OriginalEl autor Darush

  7. 0

    Este método no va a resolver la adición de la barra de herramientas, pero se puede obtener el valor predeterminado ActionBar vuelta por su página de configuración. Crear un tema para la configuración de la actividad, heredando de padres tema.

    <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge">
        <!-- Customize your theme here. -->
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    
    <style name="AppTheme.Settings" parent="AppTheme">
        <item name="windowNoTitle">false</item>
        <item name="windowActionBar">true</item>
    </style>

    En AndroidManifest.xml establecer el android:theme

    <activity
        android:name=".Settings"
        android:theme="@style/AppTheme.Settings" />

    Que es de todos.

    OriginalEl autor Ugokoli

Dejar respuesta

Please enter your comment!
Please enter your name here