2016-09-21 87 views
0

この質問は何度か尋ねられましたが、私が出会った解決策のどれも私のために働かなかったので、このトピックです。唯一、私のダイアログが幅全体を占め、上記のコードで今すぐAndroid - ダイアログの外側余白を設定する方法

PurchaseDetailsDialogFragment

public class PurchaseDetailsDialogFragment extends DialogFragment { 

    private static final String MAX_AMOUNT = "maxAmount"; 

    private static final String UNIT_PRICE = "unitPrice"; 

    private static final String PICKUP_TIME_FROM = "pickupTimeFrom"; 

    private static final String PICKUP_TIME_TO = "pickupTimeTo"; 

    public PurchaseDetailsDialogFragment() { } 

    public static PurchaseDetailsDialogFragment newInstance(int maxAmount, float unitPrice, String pickupTimeFrom, String pickupTimeTo) { 
     PurchaseDetailsDialogFragment fragment = new PurchaseDetailsDialogFragment(); 
     Bundle args = new Bundle(); 

     args.putInt(MAX_AMOUNT, maxAmount); 
     args.putFloat(UNIT_PRICE, unitPrice); 
     args.putString(PICKUP_TIME_FROM, pickupTimeFrom); 
     args.putString(PICKUP_TIME_TO, pickupTimeTo); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (getArguments() != null) { 
      int maxAmount = getArguments().getInt(MAX_AMOUNT); 
      float unitPrice = getArguments().getFloat(UNIT_PRICE); 
      String pickupFrom = getArguments().getString(PICKUP_TIME_FROM); 
      String pickupTo = getArguments().getString(PICKUP_TIME_TO); 
     } 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Context context = getContext(); 
     FragmentPurchaseDetailsDialogBinding binding = DataBindingUtil.inflate(
       LayoutInflater.from(context), 
       R.layout.fragment_purchase_details_dialog, 
       null, 
       false); 

     binding.setDataContext(new PurchaseDetailsViewModel(context)); 

     AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.DialogTheme) 
              .setView(binding.getRoot()) 
              .create(); 

     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

     return dialog; 
    } 

} 

fragment_purchase_details_dialog

<layout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/dialog"> 

    <data> 
     <variable 
      name="dataContext" 
      type="com.myapp.viewModels.PurchaseDetailsViewModel" /> 
    </data> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <FrameLayout 
      android:layout_width="wrap_content" 
      android:layout_height="80dp" 
      android:paddingTop="20dp" 
      android:layout_centerHorizontal="true" 
      android:background="@color/white"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/choose_amount" 
       style="@style/Widget.App.PurchaseTextViewTitle" /> 

     </FrameLayout> 

     <LinearLayout 
      android:id="@+id/dialogCentralContent" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:orientation="vertical" 
      android:layout_marginTop="80dp" 
      android:background="@color/dirtyWhite"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="74" /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_marginTop="46dp" 
      android:layout_centerHorizontal="true"> 

      <Button 
       android:layout_width="44dp" 
       android:layout_height="44dp" 
       android:layout_marginTop="6dp" 
       android:background="@drawable/button_filled" 
       android:text="-" 
       style="@style/Widget.App.PurchaseIncDecButton" /> 

      <FrameLayout 
       android:layout_width="60dp" 
       android:layout_height="60dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:background="@drawable/edittext_white_rounded"> 

       <EditText 
        android:layout_width="30dp" 
        android:layout_height="match_parent" 
        android:layout_marginLeft="15dp" 
        android:gravity="center_horizontal" 
        android:maxLines="1" 
        style="@style/Widget.App.PurchaseAmountEditText" /> 

      </FrameLayout> 

      <Button 
       android:layout_width="44dp" 
       android:layout_height="44dp" 
       android:layout_marginTop="6dp" 
       android:background="@drawable/button_filled" 
       android:text="+" 
       style="@style/Widget.App.PurchaseIncDecButton" /> 

     </LinearLayout> 

     <Button 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:layout_below="@+id/dialogCentralContent" 
      android:text="@string/buttonBuyText" 
      android:background="@drawable/button_submit" 
      style="@style/Widget.App.SubmitButton" /> 

    </RelativeLayout> 

</layout> 

: - 表題の状態として、私は、ダイアログの外側の余白を設定したいです画面の私はしかし、これは、断片のJavaコードで行う場合:

AlertDialog dialog = new AlertDialog.Builder(getActivity(), R.style.DialogTheme) /// the rest of the code

を、テーマ追加:

<resources> 

    <style name="DialogTheme" parent="@android:style/Theme.Material.Dialog.Alert"> 
     <item name="android:windowMinWidthMajor">380dp</item> 
     <item name="android:windowMinWidthMinor">380dp</item> 
    </style> 

</resources> 

を次にいくつかのファンキーなものが発生します。 API23では、API19以降では19と23の間のapisをチェックしていませんでしたが、ダイアログは100%幅で画面の一番上に並んでいました。私はそれが好きなように動作するようにするには?

+0

あなたは私は多分それだけだろういくつかの一般的な解決策があることが、実感ダイアログ – Cruces

+0

の幅を変更するには19以下のAPIレベルのリソースファイルを作成してみてください可能性がありどこでも働きますか?また、なぜそれがAPI19のように動作するのですか? –

+0

私は100%確信していませんが、材料設計はAPIレベル21で追加されていると考えられますので、Theme.Material.Dialog.Alertを親として見つけ出すことができないかもしれません。何もまったくないかもしれない – Cruces

答えて

0

これには本当に簡単な解決策があります。たとえば、FrameLayoutのようにレイアウトを内部に配置し、外側のレイアウト要素に適切なパディングを設定します。そして、すべてがつもりはすべてのAPI全体で同じように見えるです:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="@dimen/defaultMargin" 
    android:paddingRight="@dimen/defaultMargin"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </RelativeLayout> 
</FrameLayout> 
0

これを試しましたか?

How to Build AppCompatDialog From AlertDialog.Builder or Equivalent?

それは私がこれを試していないAppCompactDialog

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.DialogTheme) 
             .setView(binding.getRoot()) 
             .create(); 
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
AppCompatDialog alert = builder.create(); 
alert.show(); 

を試みる複数の選択肢を持つダイアログのためにそうandroid.support.v7.app.AlertDialogではなくandroid.app.AlertDialog

を使用することができ示唆しています。これが動作するかどうか私に教えてください。

+0

はい、試しました。私はコードにそのインポートを投稿しませんでしたが、私はすでに 'android.support.v7.app.AlertDialog'を使用しています。 –

関連する問題