2011-08-25 10 views
7

Quiero que aparezca un cuadro de diálogo de alerta después de hacer clic en un botón para tener una barra de búsqueda para que la persona pueda cambiar el valor de 1-48. He creado un xml personalizado que tiene una barra de búsqueda y dos vistas de texto y me gustaría que el cuadro de diálogo tenga dos botones, uno simplemente cancela el diálogo y el otro hace más trabajo. Aquí está el código que tengo hasta ahora.¿Cómo coloco una barra de búsqueda en un diálogo de alerta?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <SeekBar android:max="48" android:layout_height="wrap_content" android:id="@+id/seekBar1" android:layout_width="fill_parent" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_marginTop="74dp"></SeekBar> 
    <TextView android:text="Change Hour Range" android:layout_height="wrap_content" android:id="@+id/textView1" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"></TextView> 
    <TextView android:text="Only most recent positions" android:layout_height="wrap_content" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:layout_marginTop="15dp"></TextView> 

</RelativeLayout> 

Aquí es el diálogo de alerta que tengo hasta ahora

new AlertDialog.Builder(ImTracking.this) 
        //is there something like setcontentview for alert dialogs? 

        .setPositiveButton("Cancel", null) 
        .setNegativeButton("OK", 
          new DialogInterface.OnClickListener() { 
// does some work here 

Respuesta

13

builder.setView(View v); aquí es cómo se puede utilizar.

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.yourLayoutId, (ViewGroup) findViewById(R.id.yourLayoutRoot)); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this) 
    .setView(layout); 
    AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 
    SeekBar sb = (SeekBar)layout.findViewById(R.id.yourSeekBar); 
    sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 
      //Do something here with new value 
     } 
    }); 

Editar: Se agregó progressListener al código de muestra. Tenga en cuenta que no puede obtener una referencia a su SeekBar hasta después de que llama alertDialog.show(), si no se muestra SeekBar findViewById() devolverá nulo. También tenga en cuenta que debe usar layout.findViewById(); porque SeekBar es un elemento secundario del RelativeLayout al que se refiere el 'diseño'.

+0

Como se puede ver, tengo una barra de búsqueda en el interior de la disposición de diálogo personalizado. ¿Dónde pongo los métodos para la barra de búsqueda (en progreso, etc.)? – Sean

+0

Puede establecer un progressListener como lo haría normalmente. Ver editar. – FoamyGuy

+0

@Tim gran respuesta ... gracias .. – vnshetty

2
//This is the code you seek! 

public void ShowDialog(){ 
    final AlertDialog.Builder popDialog = new AlertDialog.Builder(this); 
final SeekBar seek = new SeekBar(this); 
    seek.setMax(255); 
    seek.setKeyProgressIncrement(1); 

popDialog.setIcon(android.R.drawable.btn_star_big_on); 
popDialog.setTitle("Please Select Into Your Desired Brightness "); 
popDialog.setView(seek); 


seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 



public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 


    txtView.setText("Value of : " + progress); 
    } 

O se puede ver en esta tutorial

Cuestiones relacionadas