2015-04-26 80 views
3

我試圖在我的custon對話框上獲得透明背景,但我無法在android 4.4.4上完成它。它只適用於Android 5.1。自定義對話框上的透明背景

我要找的結果是這樣的: http://www.americocarelli.com.br/android_5.1.png

但我得到這個:http://www.americocarelli.com.br/android_4.4.4.png

這是我的自定義佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialogo_layout_root" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/transparente" 
    android:windowBackground="@color/transparente"> 

    <TextView 
     android:id="@+id/titulo_dialogo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:gravity="center_horizontal" 
     android:paddingStart="@dimen/paddingStartEnd" 
     android:paddingEnd="@dimen/paddingStartEnd" 
     android:paddingTop="@dimen/paddingTopBottom" 
     android:paddingBottom="@dimen/paddingTopBottom" 
     android:background="@color/fundoEscuro" 
     android:textSize="@dimen/abc_text_size_title_material_toolbar"/> 

    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/drawer_shadow_down" 
     android:layout_below="@id/titulo_dialogo" 
     android:contentDescription="@string/..."/> 

    <TextView 
     android:id="@+id/mensagem_dialogo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/titulo_dialogo" 
     android:paddingStart="@dimen/paddingStartEnd" 
     android:paddingEnd="@dimen/paddingStartEnd" 
     android:paddingTop="8dp" 
     android:paddingBottom="@dimen/paddingTopBottom" 
     android:background="@color/transparente"/> 

    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/mensagem_dialogo" 
     android:layout_alignParentStart="true" 
     android:shrinkColumns="*" 
     android:stretchColumns="*"> 

     <TableRow> 
      <Button 
       android:id="@+id/BotaoNegativo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/button_shape" 
       android:textAllCaps="false"/> 

      <Button 
       android:id="@+id/BotaoPositivo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/button_shape" 
       android:textAllCaps="false"/> 
     </TableRow> 
    </TableLayout> 
</RelativeLayout> 

在我style.xml,我得到了這個定義:

<color name="transparente">#00FFFFFF</color> 

這是代碼:

public class Dialogos extends DialogFragment { 
    private static final String PARAMETRO_TITULO = "titulo"; 
    private static final String PARAMETRO_MENSAGEM = "mensagem"; 
    private static final String PARAMETRO_TXT_BTN_POSITIVO = "txtBtnPositivo"; 
    private static final String PARAMETRO_TXT_BTN_NEGATIVO = "txtBtnNegativo"; 

    public Dialogos(){ 
    } 

    public static Dialogos newInstance(int titulo, int mensagem, int txtBtnPositivo, int txtBtnNegativo) { 
     Dialogos fragment = new Dialogos(); 
     Bundle args = new Bundle(); 

     args.putInt(PARAMETRO_TITULO, titulo); 
     args.putInt(PARAMETRO_MENSAGEM, mensagem); 
     args.putInt(PARAMETRO_TXT_BTN_POSITIVO, txtBtnPositivo); 
     args.putInt(PARAMETRO_TXT_BTN_NEGATIVO, txtBtnNegativo); 

     fragment.setArguments(args); 

     return fragment; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     int titulo = getArguments().getInt(PARAMETRO_TITULO); 
     int mensagem = getArguments().getInt(PARAMETRO_MENSAGEM); 
     int txtBtnPositivo = getArguments().getInt(PARAMETRO_TXT_BTN_POSITIVO); 
     int txtBtnNegativo = getArguments().getInt(PARAMETRO_TXT_BTN_NEGATIVO); 

     Typeface fonte = Typeface.createFromAsset(getActivity().getAssets(), "Fonts/RegencieLightAlt.ttf"); 

     final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View view = inflater.inflate(R.layout.mensagem_dialogo, null); 
     TextView tvTitulo = (TextView) view.findViewById(R.id.titulo_dialogo); 
     TextView tvMensagem = (TextView) view.findViewById(R.id.mensagem_dialogo); 

     tvTitulo.setTypeface(fonte); 
     tvMensagem.setTypeface(fonte); 

     if (titulo != 0) 
      tvTitulo.setText(titulo); 

     Button btnPositivo = (Button) view.findViewById(R.id.BotaoPositivo); 
     Button btnNegativo = (Button) view.findViewById(R.id.BotaoNegativo); 

     tvMensagem.setText(mensagem); 

     btnPositivo.setTypeface(fonte); 
     btnNegativo.setTypeface(fonte); 

     btnPositivo.setText(txtBtnPositivo); 
     btnNegativo.setText(txtBtnNegativo); 

     btnPositivo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, getActivity().getIntent()); 
      } 
     }); 

     btnNegativo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, getActivity().getIntent()); 
      } 
     }); 

     builder.setView(view); 

     return builder.create(); 
    } 
} 
+0

你可以去我的答案在這裏:http://stackoverflow.com/questions/25174165/transparent-alertdialog-has-black-background/25174316#25174316 –

+0

謝謝@Rod_Algonquin,它完美的工作!請回答問題,以便我可以將其標記爲正確 –

回答

11

的問題是,AlertDialog建設者實際上是不利於設計透明的對話,將始終有這種黑色的背景,這實際上是它的主題,而是使用對話框創建而是一個透明的主題。

樣本:

Dialog alertDialog = new Dialog(this); 
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    alertDialog.setContentView(R.layout.tabs); 
    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    alertDialog.show(); 

使用對話框不需要透明背景的任何主題的操作,因此它基本上是很容易。