Как поместить панель поиска в диалоговое окно с предупреждением? - PullRequest
7 голосов
/ 25 августа 2011

Я хочу, чтобы диалоговое окно с предупреждением всплыло после того, как я нажал кнопку, чтобы была панель поиска, чтобы человек мог изменить значение от 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

Ответы [ 2 ]

13 голосов
/ 25 августа 2011

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

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

2 голосов
/ 06 сентября 2015
    //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);
  }

Или вы можете посмотреть этот учебник

...