26

のサイズを設定するために多くのコマンドを試してきましたDialogFragment。カラーピッカーのみが含まれているため、ダイアログの背景とタイトルを削除しました。

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(
    new ColorDrawable(android.graphics.Color.TRANSPARENT));

ただし、ダイアログを必要な場所に配置したいのですが、問題があります。私が使う:

WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
params.width = LayoutParams.WRAP_CONTENT;
params.height =  LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.LEFT;
getDialog().getWindow().setAttributes(params);

しかし、1 つの (大きな) 障害が残っています。ダイアログ ペインが見えなくても、一定のサイズがあり、ダイアログの位置が制限されます。このLayoutParams.WRAP_CONTENTペインのサイズをカラーピッカーに制限するためにここにいますが、何らかの理由で機能しません。

誰かが似たようなことをすることができましたか?

4

4 に答える 4

22

試行錯誤の末、解決策を見つけました。

これが私のDialogFragmentクラスの実装です:

public class ColorDialogFragment extends SherlockDialogFragment {

    public ColorDialogFragment() {
    //You need to provide a default constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, 
                     ViewGroup container,
                     Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_color_picker, container);
    // R.layout.dialog_color_picker is the custom layout of my dialog
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
    wmlp.gravity = Gravity.LEFT;
    return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.colorPickerStyle);
    // this setStyle is VERY important.
    // STYLE_NO_FRAME means that I will provide my own layout and style for the whole dialog
    // so for example the size of the default dialog will not get in my way
    // the style extends the default one. see bellow.        
    }

  }

R.style.colorPickerStyle は以下に対応します:

<style name="colorPickerStyle" parent="Theme.Sherlock.Light.Dialog">
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:cacheColorHint">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

必要に応じて、デフォルトのダイアログ スタイルを拡張するだけです。

最後に、次のコマンドでこのダイアログを呼び出すことができます:

private void showDialog() {
   ColorDialogFragment newFragment = new ColorDialogFragment();
   newFragment.show(getSupportFragmentManager(), "colorPicker");
   }   
于 2013-02-22T16:56:52.850 に答える
3

このコードを使用して、Dialog Fragment android のサイズを変更します

public void onResume() {
        super.onResume();
        Window window = getDialog().getWindow();
        window.setLayout(250, 100);
        window.setGravity(Gravity.RIGHT);
    }
于 2015-10-23T06:20:45.237 に答える