¿Cómo agregar un botón a una PreferenceScreen?

Soy bastante nuevo en Android Development y solo he encontrado Preferencias. Encontré PreferenceScreens y quería crear una funcionalidad de inicio de sesión con él. El único problema que tengo que no sé caliente podría añadir un botón de "Inicio de sesión" a la pantalla de preferencia. Así es como se ve mi vista de preferencia:

<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> 

El botón debe estar justo debajo de las dos ExitTextPreferences.

¿Hay una solución simple para este problema? La única solución que encontré no funcionaba porque utilizaba pantallas de preferencias secundarias.

Actualizar:

Me di cuenta de que puedo agregar botones de esta manera:

 <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> 

Y el archivo de diseño (loginButtons.xml) se ve así:

 <?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> 

Así que ahora los botones aparecen, pero no puedo acceder a ellos en código. Lo intenté con findViewById () pero esto está devolviendo null. ¿Alguna idea de cómo puedo acceder a estos botones?

Para el xml:

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

Entonces para el java en su 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; } }); 

Esto aparecerá como una preferencia normal, con sólo un título y un resumen, por lo que parecerá que pertenece.

Edit: He cambiado a @string/myCoolButton y getString(R.string.myCoolButton) porque es mejor utilizar recursos para la asistencia del compilador, la traducción de idiomas y la facilidad de los cambios de cadena.

Quería añadir un enlace de salida a las preferencias y era capaz de modificar el código de Jakar para que funcione de esta manera:

 <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> 

Originalmente la 'Preferencia' era un 'EditTextPreference' que edité a mano.

Luego en la clase:

 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; } }); } } } 

Supongo que es demasiado tarde. Esto es lo que he hecho para una preferencia de botón.

La preferencia en el archivo preference.xml en la carpeta xml

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

Y pref_reset_bd_button.xml en la carpeta de diseño

  <?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> 

Añadir

 setContentView(R.layout.buttonLayout); 

Abajo

 addPreferencesFromResource(R.xml.yourPreference); 

ButtonLayout:

 <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> 

Acceda al botón por:

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

Usted puede obtener el botón en la parte superior o en la parte inferior de la pantalla, poniendo el botón en RelativeLayout:

  • Top_control_bar
  • Bottom_control_bar

Bottom_control_bar

Esto funcionó para mí. Espero poder ayudar a alguien con este pedazo de código.

No creo que haya una manera fácil de agregar un botón a una pantalla de preferencias. Las preferencias están limitadas a:

 EditTextPreference ListPreference RingtonePreference CheckboxPreference 

Mientras utiliza una pantalla de preferencias, se limita al uso de estas opciones, y no hay un solo "botón de preferencia" que podría ser fácilmente utilizado para su necesidad.

He estado buscando funcionalidad similar, con la adición de botones a la pantalla de preferencias, pero parece que usted necesita para construir su propia pantalla para esto, la gestión del cambio a las preferencias en su propia aplicación.

¡Puedes hacerlo así para acceder al botón!

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

No te olvides de añadir android:id al LinearLayout que contiene el botón de layoutButtons.xml , es decir, 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! 

Prueba android: onClick = "myMethod" funciona como un encanto para eventos onclick simples

También puede personalizar el diseño de una preferencia mediante la sustitución de Preference.onCreateView(parent) . El ejemplo siguiente utiliza una clase interna anónima para hacer preferencias de color rojo.

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

Puede utilizar esta técnica para agregar un botón a la vista predeterminada.

  • Cómo crear un botón de imagen en Android?
  • Un botón con el comentario que ya ha hecho clic no se mostrará la próxima vez que el usuario abra la aplicación
  • Diseño del centro Android
  • Cómo solucionar el doble toque en Button Problema en android?
  • Android: ¿Cómo obtener el botón de flecha?
  • Android: Hacer el botón holo predeterminado opaco
  • Android crea un "botón plano"
  • Botones de triángulo diagonal de Android
  • Añadir botones a la disposición relativa Dinámica o extensión lineal Layout android
  • ¿Cómo agregar a mi aplicación Android un botón de hacer como a una página de facebook?
  • ¿Cómo activar el botón "Compartir" en la aplicación Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.