2011-08-25 2 views
7

Я хочу, чтобы появилось диалоговое окно с предупреждением после нажатия кнопки, чтобы иметь панель поиска, чтобы человек мог изменить значение с 1-48. Я создал собственный xml, в котором есть строка поиска и два текстовых представления, и я хотел бы, чтобы диалоговое окно имело две кнопки, один просто отменяет диалог, а другой работает больше. Вот код, который у меня есть.Как поместить строку поиска в диалоговом окне предупреждения?

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

Вот предупреждение диалог, который я до сих пор

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 

ответ

13

Да builder.setView(View v); вот как вы можете использовать его.

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

Редактировать: Добавлен прогрессListener для образца кода. Обратите внимание, что вы не можете получить ссылку на свой SeekBar до после вы вызываете alertDialog.show(), если SeekBar не отображается, findViewById() вернет значение null. Также обратите внимание, что вы должны использовать layout.findViewById();, потому что SeekBar является дочерним элементом RelativeLayout, к которому относится «макет».

+0

Как вы можете видеть, у меня есть SeekBar внутри макета диалога на заказ. Где я могу поместить методы для поиска (onprogress changed и т. Д.) – Sean

+0

Вы можете установить progressListener, как обычно. См. Править. – FoamyGuy

+0

@ Тит отличный ответ ... спасибо .. – 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); 
    } 

Или вы можете посмотреть на этой tutorial

Смежные вопросы