web-dev-qa-db-fra.com

Comment ajouter un bouton à un écran PreferenceScreen?

Je suis assez nouveau pour Android Développement et viens de tomber sur Préférences. J'ai trouvé PreferenceScreens et je voulais créer une fonctionnalité de connexion avec celle-ci. Le seul problème que je ne connais pas est chaud Vous pouvez ajouter un bouton "Connexion" à l'écran Préférences. Voici à quoi ressemble ma vue Préférences:

<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
...
    <PreferenceScreen Android:title="@string/login" Android:key="Login">
        <EditTextPreference Android:persistent="true" Android:title="@string/username" Android:key="Username"></EditTextPreference>
        <EditTextPreference Android:title="@string/password" Android:persistent="true" Android:password="true" Android:key="Password"></EditTextPreference>
    </PreferenceScreen>
...
</PreferenceScreen>

Le bouton devrait être juste sous les deux ExitTextPreferences.

Existe-t-il une solution simple à ce problème? La solution que j'ai trouvée ne fonctionnait pas car j'utilise des écrans de préférences sous.

Mise à jour:

J'ai compris que je pouvais ajouter des boutons de cette façon:

<PreferenceScreen Android:title="@string/login" Android:key="Login">
        <EditTextPreference Android:persistent="true" Android:title="@string/username" Android:key="Username"></EditTextPreference>
        <EditTextPreference Android:title="@string/password" Android:persistent="true" Android:password="true" Android:key="Password"></EditTextPreference>
        <Preference Android:layout="@layout/loginButtons" Android:key="loginButtons"></Preference>
</PreferenceScreen>

et le fichier de disposition (loginButtons.xml) a cette apparence:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent"
    Android:weightSum="10" 
    Android:baselineAligned="false" Android:orientation="horizontal">
    <Button Android:text="Login" Android:layout_width="fill_parent"
        Android:layout_weight="5" Android:layout_height="wrap_content"
        Android:id="@+id/loginButton" Android:layout_gravity="left"></Button>
    <Button Android:text="Password?" Android:layout_width="fill_parent"
        Android:layout_weight="5" Android:layout_height="wrap_content"
        Android:id="@+id/forgottenPasswordButton"></Button>
</LinearLayout>

Alors maintenant, les boutons apparaissent mais je ne peux pas y accéder en code. Je l'ai essayé avec findViewById () mais cela renvoie null. Des idées comment je pourrais accéder à ces boutons?

126
Van Naaktgeboren

Pour le xml:

<Preference Android:title="Acts like a button"
                Android:key="@string/myCoolButton"
                Android:summary="This is a cool button"/>

Ensuite, pour le Java dans votre onCreate())

Preference button = findPreference(getString(R.string.myCoolButton));
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {   
                    //code for what you want it to do   
                    return true;
                }
            });

Cela apparaîtra comme une préférence normale, avec juste un titre et un résumé, donc ça ressemblera à ça.

Edit: J'ai changé pour utiliser @string/myCoolButton Et getString(R.string.myCoolButton) parce qu'il est préférable d'utiliser des ressources pour l'aide du compilateur, la traduction de la langue et la facilité de modification des chaînes.

291
Reed

Je voulais ajouter un lien de sortie aux préférences et pouvais modifier le code de Jakar pour qu'il fonctionne comme ceci:

<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android" >   
   <PreferenceCategory Android:title="Settings">
       <Preference Android:title="Click to exit" Android:key="exitlink"/>       
   </PreferenceCategory>    
</PreferenceScreen>

A l’origine, la "préférence" était une "EditTextPreference" que j’ai modifiée.

Puis en classe:

public class MyPreferences extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.mypreferences);

    Preference button = (Preference)getPreferenceManager().findPreference("exitlink");      
    if (button != null) {
        button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference arg0) {
                finish();   
                return true;
            }
        });     
    }
}
}
38
Dunfield

Je suppose que c'est trop tard. C'est ce que j'ai fait pour une préférence de bouton.

La préférence dans le fichier preference.xml du dossier xml

....
    <Preference
        Android:key="resetBD"
        Android:title="@string/ajustes_almacenamiento"
        Android:summary="@string/ajustes_almacenamiento_desc"
        Android:widgetLayout="@layout/pref_reset_bd_button" 
    ></Preference>
  ...

et pref_reset_bd_button.xml dans le dossier de présentation

 <?xml version="1.0" encoding="utf-8"?>
   <Button
       xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/resetButton" 
        Android:text="@string/ajustes_almacenamiento_bt" 
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:onClick="resetearBD">

   </Button>
36
Nicolas

Ajouter

setContentView(R.layout.buttonLayout);

Au dessous de

addPreferencesFromResource(R.xml.yourPreference);

disposition des boutons:

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

<RelativeLayout
        Android:id="@+id/top_control_bar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
</RelativeLayout>

<LinearLayout
        Android:id="@+id/bottom_control_bar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true">

    <Button
            Android:id="@+id/button"
            Android:layout_width="match_parent"
            Android:layout_height="70dp"
            Android:text="@string/saveAlarm"/>
</LinearLayout>

<ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="0dip"
        Android:layout_above="@id/bottom_control_bar"
        Android:layout_below="@id/top_control_bar"
        Android:choiceMode="multipleChoice">
</ListView>

Bouton d'accès par:

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //Your event
    }
});

Vous pouvez obtenir le bouton en haut ou en bas de l'écran en le mettant dans RelativeLayout:

  • top_control_bar
  • bottom_control_bar

bottom_control_bar

Cela a fonctionné pour moi. J'espère que je peux aider quelqu'un avec ce morceau de code.

6
Thijs Limmen

Je ne pense pas qu’il existe un moyen simple d’ajouter un bouton à un écran de préférences. Les préférences sont limitées à:

EditTextPreference
ListPreference
RingtonePreference
CheckboxPreference

Lorsque vous utilisez un écran de préférences, vous êtes limité à l’utilisation de ces options et il n’existe pas de "préférence de bouton" unique qui puisse être facilement utilisée pour vos besoins.

Je recherchais des fonctionnalités similaires, avec l'ajout de boutons à l'écran de préférences, mais il semble que vous deviez créer votre propre écran pour cela, en gérant le changement des préférences dans votre propre implémentation.

1
Eric Nordvik

Vous pouvez le faire comme ceci pour accéder au bouton!

 View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layoutButtons, null, false);

N'oubliez pas d'ajouter Android:id au LinearLayout contenant le bouton dans layoutButtons.xml, c’est-à-dire Android:id="@+id/mylayout"

 LinearLayout mLayout = (LinearLayout) footerView.findViewById(R.id.mylayout);
 Button login = (Button) footerView.findViewById(R.id.loginButton);
 login.setOnClickListener(this);
 ListView lv = (ListView) findViewById(Android.R.id.list);
 lv.addFooterView(footerView);

 // Lines 2 and 3 can be used in the same way for a second Button!
1
Shah

Vous pouvez également personnaliser la présentation d'une préférence en remplaçant Preference.onCreateView(parent). L'exemple ci-dessous utilise une classe interne anonyme pour définir les préférences en rouge.

    screen.addPreference(
        new Preference(context) {
            @Override
            protected View onCreateView(ViewGroup parent) {
                View view = super.onCreateView(parent);
                view.setBackgroundColor(Color.RED);
                return view;
            }
        });

Vous pouvez utiliser cette technique pour ajouter un bouton à la vue par défaut.

0
Roger Keays

essayez Android: onClick = "myMethod" fonctionne comme un charme pour les événements onClick simples

0
neelabh