Android自定义对话框

时间:2012-12-19 18:24:54

标签: android android-custom-view android-dialog

我必须在运行时构建一个自定义对话框。根据具体情况,对话框应显示一到四个搜索栏。我想得到类似的东西:

  • title1 seekbar1
  • title2 seekbar2 ...

我正在尝试从Android开发者指南网页获取的FireMissilesDialogFragment示例代码。我修改了onCreateDialog()方法,添加以下代码:

    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    Context     context = builder.getContext();//getActivity().getBaseContext(); 
    LinearLayout    layout = new LinearLayout( context );

    layout.setLayoutParams( new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT) );


    SeekBar         seek_bar = new SeekBar( context );

    TextView        text = new TextView( context );
    text.setClickable(false);
    text.setText( "slide me" );

    layout.addView( text, new LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT) );

    layout.addView( seek_bar, new LinearLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT) );


    builder.setView( layout );

但是,不是在两个不同的行中显示文本“滑动我”和搜索栏,它只显示文本。如何创建这样的自定义对话框?

2 个答案:

答案 0 :(得分:0)

Android Dialogs在它们可以包含的内容方面受到限制。创建活动更容易,并告诉android将其显示为对话框:

  1. 创建新活动并使用这些滑块添加布局文件

  2. 在清单中,使用此行

  3. <activity android:theme="@android:style/Theme.Dialog">

    让活动显示为对话框。这种做法不会出错。
    此外,如果您需要从对话框中获取结果,也可以使用startActivityForResult

答案 1 :(得分:0)

您需要先使用搜索栏和文本视图制作布局。你可以使用layoutinflater将它添加到你的对话框中。 试试这个....

 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
View layout = inflater.inflate(R.layout.yourLayoutId, (ViewGroup) findViewById(R.id.MyLayout));
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
    }
});