2015-03-09 12 views
37

Was ich versuche zu tun: Ich versuche, einen benutzerdefinierten Dialog zu machen. mit abgerundeten EckenSo erstellen Sie benutzerdefinierte Dialogfeld mit abgerundeten Ecken in Android

Was ist Hacken: Ich bin in der Lage, benutzerdefinierte Dialog zu machen, aber es dosent haben abgerundete Ecken. Ich habe versucht, einen Selektor hinzugefügt, aber noch konnte ich nicht


Java-Code:

private void launchDismissDlg() { 

     dialog = new Dialog(getActivity(), android.R.style.Theme_Dialog); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.dlg_dismiss); 
     dialog.setCanceledOnTouchOutside(true); 

     Button btnReopenId = (Button) dialog.findViewById(R.id.btnReopenId); 
     Button btnCancelId = (Button) dialog.findViewById(R.id.btnCancelId); 

     btnReopenId.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 



      } 
     }); 


     btnCancelId.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 



      } 
     }); 
     dialog.setCanceledOnTouchOutside(false); 
     dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 
     dialog.show(); 

    } 

xml-Code:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:orientation="vertical" > 

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dp" 
      android:gravity="center" > 

      <TextView 
       android:id="@+id/textView1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:text="&quot;I WOULD LIKE TO DISMISS THE VENDOR&quot;" 
       android:textColor="@color/col_dlg_blue_light" 
       android:textSize="14sp" 
       android:textStyle="bold" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="5dp" 
      android:gravity="center" > 

      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:text="BECAUSE" 
       android:textColor="@android:color/black" 
       android:textStyle="bold" /> 
     </TableRow> 



     <TableRow 
      android:id="@+id/tableRow4" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <Button 
       android:id="@+id/btnReopenId" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@color/col_dlg_green_light" 
       android:text="REOPEN" 
       android:padding="5dp" 
       android:textSize="14sp" 
       android:textColor="@android:color/white" 
       android:textStyle="bold" /> 

      <Button 
       android:id="@+id/btnCancelId" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:background="@color/col_dlg_pink_light" 
       android:text="CANCEL" 
       android:padding="5dp" 
       android:textSize="14sp" 
       android:textColor="@android:color/white" 
       android:textStyle="bold" /> 
     </TableRow> 
    </TableLayout> 

</LinearLayout> 
+0

Sprechen Sie über Menü Floating? – Apurva

+0

@Apurva ... Ich habe nicht Floating Menü verwendet ... aber ich bin über einen Alert-Dialog (custom) – Devrath

+0

ich über Floating-Menü wurde gefragt, weil ich um die Enge getrieben Pop nur, dass bis gesehen habe. Nie gesehen Dialog mit abgerundeten Ecken. – Apurva

Antwort

121

erstellen xml in ziehbar, sagen dialog_bg.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid 
     android:color="@color/white"/> 
    <corners 
     android:radius="30dp" /> 
    <padding 
     android:left="10dp" 
     android:top="10dp" 
     android:right="10dp" 
     android:bottom="10dp" /> 
</shape> 

Set es als Hintergrund in Ihrem Layout xml

android:background="@drawable/dialog_bg" 

stellen Sie den Hintergrund Ihres Dialog transparent

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
+1

Das Problem Bei diesem Ansatz ist der Hintergrund der Schaltfläche ebenfalls transparent. –

+8

'dialog.getWindow(). SetBackgroundDrawable (neues ColorDrawable (Color.TRANSPARENT));' ist was auf den meisten anderen SO-Threads! +1 –

+1

Genie - das hat total funktioniert! –

4

Sie die Form für den Hintergrund verwenden as-

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<solid android:color="@android:color/transparent"/> 
<corners android:radius="10dp" /> 
<padding android:left="10dp" android:right="10dp"/> 
</shape> 

Schauen Sie auf this für die Details.

14

Sie müssen Folgendes tun:

  • erstellen Hintergrund mit abgerundeten Ecken für den Hintergrund des Dialogs:

    android:layout_marginLeft="20dip" 
    android:layout_marginRight="20dip" 
    android:background="@drawable/dialog_background" 
    
  • schließlich:

    <?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    
        <solid android:color="#fff" /> 
    
        <corners 
         android:bottomLeftRadius="8dp" 
         android:bottomRightRadius="8dp" 
         android:topLeftRadius="8dp" 
         android:topRightRadius="8dp" /> 
    
    </shape> 
    
  • Jetzt im Stammlayout, das Hintergrund mit dem erforderlichen Spielraum in Ihrem Dialog XML-Datei verwenden Im Java-Teil müssen Sie dies tun:

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(layoutResId); 
    View v = getWindow().getDecorView(); 
    v.setBackgroundResource(android.R.color.transparent); 
    

Das funktioniert perfekt für mich.

+0

hat es funktioniert. Dank –

+0

Es funktioniert für mich auch :) Vielen Dank! – Woppi

+0

gute Arbeit .. weiter so .. –

3

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

das funktioniert mich für

2

dimen.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <integer name="weight">1</integer> 

    <dimen name="dialog_top_radius">21dp</dimen> 

    <dimen name="textview_dialog_head_min_height">50dp</dimen> 
    <dimen name="textview_dialog_drawable_padding">5dp</dimen> 

    <dimen name="button_dialog_layout_margin">3dp</dimen> 


</resources> 

styles.xml

<style name="TextView.Dialog"> 
     <item name="android:paddingLeft">@dimen/dimen_size</item> 
     <item name="android:paddingRight">@dimen/dimen_size</item> 
     <item name="android:gravity">center_vertical</item> 
     <item name="android:textColor">@color/black</item> 
    </style> 

    <style name="TextView.Dialog.Head"> 
     <item name="android:minHeight">@dimen/textview_dialog_head_min_height</item> 
     <item name="android:textColor">@color/white</item> 
     <item name="android:background">@drawable/dialog_title_style</item> 
     <item name="android:drawablePadding">@dimen/textview_dialog_drawable_padding</item> 
    </style> 

    <style name="TextView.Dialog.Text"> 
     <item name="android:textAppearance">@style/Font.Medium.16</item> 
    </style> 

    <style name="Button" parent="Base.Widget.AppCompat.Button"> 
     <item name="android:layout_height">@dimen/button_min_height</item> 
     <item name="android:layout_width">match_parent</item> 
     <item name="android:textColor">@color/white</item> 
     <item name="android:gravity">center</item> 
     <item name="android:textAppearance">@style/Font.Medium.20</item> 
    </style> 

<style name="Button.Dialog"> 
     <item name="android:layout_weight">@integer/weight</item> 
     <item name="android:layout_margin">@dimen/button_dialog_layout_margin</item> 
    </style> 

    <style name="Button.Dialog.Middle"> 
     <item name="android:background">@drawable/button_primary_selector</item> 
    </style> 

dialog_title_style.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <gradient 
     android:angle="270" 
     android:endColor="@color/primaryDark" 
     android:startColor="@color/primaryDark" /> 

    <corners 
     android:topLeftRadius="@dimen/dialog_top_radius" 
     android:topRightRadius="@dimen/dialog_top_radius" /> 

</shape> 

dialog_hintergrund.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/backgroundDialog" /> 
    <corners 
     android:topLeftRadius="@dimen/dialog_top_radius" 
     android:topRightRadius="@dimen/dialog_top_radius" /> 
    <padding /> 
</shape> 

dialog_one_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/dailog_background" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/dialogOneButtonTitle" 
     style="@style/TextView.Dialog.Head" 
     android:text="Process Completed" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="16dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/dialogOneButtonText" 
      style="@style/TextView.Dialog.Text" 
      android:text="Return the main menu" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/dialogOneButtonOkButton" 
       style="@style/Button.Dialog.Middle" 
       android:text="Ok" /> 

     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

OneButtonDialog.java

package com.example.sametoztoprak.concept.dialogs; 

import android.app.Dialog; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.TextView; 

import com.example.sametoztoprak.concept.R; 
import com.example.sametoztoprak.concept.models.DialogFields; 

/** 
* Created by sametoztoprak on 26/09/2017. 
*/ 

public class OneButtonDialog extends Dialog implements View.OnClickListener { 

    private static OneButtonDialog oneButtonDialog; 
    private static DialogFields dialogFields; 

    private Button dialogOneButtonOkButton; 
    private TextView dialogOneButtonText; 
    private TextView dialogOneButtonTitle; 

    public OneButtonDialog(AppCompatActivity activity) { 
     super(activity); 
    } 

    public static OneButtonDialog getInstance(AppCompatActivity activity, DialogFields dialogFields) { 
     OneButtonDialog.dialogFields = dialogFields; 
     return oneButtonDialog = (oneButtonDialog == null) ? new OneButtonDialog(activity) : oneButtonDialog; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.dialog_one_button); 
     getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

     dialogOneButtonTitle = (TextView) findViewById(R.id.dialogOneButtonTitle); 
     dialogOneButtonText = (TextView) findViewById(R.id.dialogOneButtonText); 
     dialogOneButtonOkButton = (Button) findViewById(R.id.dialogOneButtonOkButton); 

     dialogOneButtonOkButton.setOnClickListener(this); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     dialogOneButtonTitle.setText(dialogFields.getTitle()); 
     dialogOneButtonText.setText(dialogFields.getText()); 
     dialogOneButtonOkButton.setText(dialogFields.getOneButton()); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.dialogOneButtonOkButton: 

       break; 
      default: 
       break; 
     } 
     dismiss(); 
    } 
} 

enter image description here

Verwandte Themen