2016-09-13 9 views
0

DialogFragmentsのスタイルを作成したいのですが、DialogFragmentsには適用されません。DialogFragmentのXMLのスタイルプロパティが適用されていません

サイズは100dpに決して変更されません。ご覧のとおり、私はandroid:widthlayout_widthの両方を使用しましたが、これらのどちらも何もしません。

パディングも適用されません。

背景R.drawable.popup_rounded_frameは角が丸い四角形のちょうどshapeです。

ほとんどの場合動作しますが、背景は私のレイアウトの他のRelativeLayouts'の背景にも適用されます。しかし、それは実際には現在の背景を削除し、あなたが望むものに置き換えたgetDialog().getWindow().setBackgroundDrawableResource(R.drawable.popup_rounded_frame);のようには動作しません。

この<item name="android:background">@drawable/popup_rounded_frame</item>は、現在の背景の上にのみ背景を設定します。私DialogFragmentため

スタイルは

<style name="ArionDialogFragment" parent="Theme.AppCompat.Dialog"> 

    <item name="android:width">100dp</item> 
    <item name="android:height">100dp</item> 

    <item name="android:layout_width">100dp</item> 
    <item name="android:layout_height">100dp</item> 


    <item name="android:padding">16dp</item> 
    <item name="android:background">@drawable/popup_rounded_frame</item> 

</style> 

これは私のDialogFragmentが

この

popuptest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      PopUP popUP = new PopUP(); 
      popUP.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.ArionDialogFragment); 
      popUP.show(getSupportFragmentManager(),"d"); 

     } 
    }); 
を起動する方法ですが

public class PopUP extends DialogFragment { 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.popup_connectsensor,container,false); 


    return v; 
} 
DialogFragmentを拡張 PopUpです

これは次のようになります。https://www.dropbox.com/s/8iy5b5t8ax293oo/Screenshot_20160913-123922.png?dl=0

+0

'setStyle(...)'コードをPopupクラスの 'onCreate()'メソッドの中に入れてみましょう。 @Override public void onCreate(...){ super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_FRAME、R.style.ArionDialogFragment); } ' – nicopasso

+0

@nicopasso背景は適用されますが、幅/高さは適用されません。 – Muddz

+0

@nicopasso PopUPのクラスでこれらの比率をすべて作成してから、すべて動作します。 – Muddz

答えて

0

あなたは間違ったやり方でいると思います。ダイアログを作成するときにスタイルを適用する必要があります。このような何か:

public static class AwesomeDialogFragment extends DialogFragment { 

    public static AwesomeDialogFragment newInstance() { 
     AwesomeDialogFragment f = new AwesomeDialogFragment(); 
     f.setArguments(new Bundle(0)); 
     return f; 
    } 

    @SuppressLint("InflateParams") 
    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new AlertDialog.Builder(getActivity(), R.style.YourStyle) 
       .setView(getActivity().getLayoutInflater().inflate(R.layout.your_layout, null)) 
       .setPositiveButton(R.string.btn_done, null) 
       .setNegativeButton(R.string.btn_cancel, null) 
       .setCancelable(false) 
       .create(); 
    } 
} 

あなたが代わりにonCreateDialog()をオーバーライドする必要があります。このようにして、カスタムスタイルを適用することができます。

あなたは、以下の方法であなたのフラグメントを呼び出すことができます。

AwesomeDialogFragment.newInstance().show(getSupportFragmentManager(), "your_tag"); 
+0

AlertDialogを作成していません。私は5つの異なるDialogFragmentsを持っています、いくつかはedittextとボタンとtextviewsだけのものです。しかし、それらのすべては、style.xmlに指定されているのと同じスタイルになります。 – Muddz

+0

それは問題ではありません。それは同じになります。 'setView()'メソッドで独自のカスタムレイアウトを提供することができます。 – Blehi

+0

それはあまりにも動作しません – Muddz

0

ポップアップクラスのonCreate()メソッド内

setStyle(DialogFragment.STYLE_NO_FRAME, R.style.ArionDialogFragment)

コードを入れて、あなたを試してみてください。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NO_FRAME,R.style.ArionDialogFragment); 
} 

これにより、ダイアログで必要なスタイルが正しく適用されます。

+0

このdosn't仕事。ちょうど試しました – Muddz

関連する問題