2

実行時にカスタム ダイアログを作成する必要があります。状況に応じて、ダイアログには 1 つから 4 つのシーク バーが表示されます。私は次のようなものを取得したいと思います:

  • タイトル1 シークバー1
  • タイトル2 シークバー2 ...

私は、Android 開発者ガイドの Web ページから取得した 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 );

ただし、「slide me」というテキストとシーク バーを 2 つの異なる行に表示する代わりに、テキストのみを表示します。このようなカスタム ダイアログを作成するにはどうすればよいですか?

4

2 に答える 2

0

Android ダイアログに含めることができる内容は多少制限されています。アクティビティを作成し、android にダイアログとして表示するように指示する方が簡単です。

  1. 新しいアクティビティを作成し、これらのスライダーでレイアウト ファイルを追加します

  2. マニフェストでは、この行を使用します

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

アクティビティをダイアログとして表示します。このアプローチで間違いはありません。
また、この方法でダイアログから結果を取得する必要がある場合は、startActivityForResultを使用できます。

于 2012-12-19T19:05:36.563 に答える
0

最初に、シーク バーとテキスト ビューでレイアウトを作成する必要があります。レイアウト インフレータを使用して、ディロージ ボックスに追加できます。これを試して....

 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
    }
});
于 2012-12-19T19:36:11.323 に答える