如何使这个简单的对话框片段半透明

时间:2013-07-07 18:47:53

标签: android actionbarsherlock android-dialogfragment

我试图让这个简单的Dialog半透明:

class TestDialog extends SherlockDialogFragment
{


    public TestDialog()
    {
    super();        
    }




    @Override
    public Dialog onCreateDialog(Bundle savedInstanceStateBundle ) 
    {

    AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater1 = getActivity().getLayoutInflater();

    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog layout
    builder1.setView(inflater1.inflate(R.layout.dlg_test, null))
    // Add action buttons
    .setPositiveButton( "Ok", new DialogInterface.OnClickListener() 
     {

        @Override       
        public void onClick(DialogInterface dialog, int id)         
        {           
            // sign in the user ...                    
        }


     })
     .setNegativeButton( "Cancel", new DialogInterface.OnClickListener() 
      {      
                 @Override
         public void onClick(DialogInterface dialog, int id)             
         {           

         }           
      });

        return builder1.create();

    }        


}

布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp"
        android:hint="User name" />

 </LinearLayout>

我尝试了所有方法,从使用透明的.png作为线性布局的背景可绘制,到将alpha字段设置为0.5,使用等于0的可绘制颜色。我无法进行该对话半透明。即使有可能,我也不知道。 我想要创建的是一个对话框,如下图中的面板:semi-transparent control panel。 谢谢。 注1:所需的最小sdk是版本8,目标是最新的(实际上是v17)。

6 个答案:

答案 0 :(得分:5)

而不是:

return builder1.create();

尝试这个:

Dialog dialog = builder1.create();
Drawable d = new ColorDrawable(Color.BLACK);
d.setAlpha(130);
dialog.getWindow().setBackgroundDrawable(d);
return dialog;

答案 1 :(得分:1)

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    return dialog;
}

你可以把

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

在对话框的onCreateView中。

答案 2 :(得分:0)

您可以在对话框片段引用中尝试这两个主题中的任何一个。

yourdialogFragment.setStyle(style,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

yourdialogFragment.setStyle(style,android.R.style.Theme_Holo_Light_Dialog);

希望这会有所帮助。

答案 3 :(得分:0)

您可以尝试使背景透明,如果超级类是对话框,请使用此选项:

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

或者如果您的超类是DialogFragment:

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

我的另一个解决方案类似于“kaushal trivedi”。 使用DialogFragments:

public class MyDialogFragment extends DialogFragment {

...

  @Override
  public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);
    setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
  }
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.my_dialog, container,false);
  }
}

这使您的对话框成为全屏且没有背景,因此您可以在其中放置您想要的内容。

答案 4 :(得分:0)

试试这个

public class Dialogs extends DialogFragment {

    public Dialogs() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style. Theme_WallpaperSettings);
    }
}

答案 5 :(得分:0)

这是我用AlertDialog实现半透明的方法。

创建自定义样式:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

然后使用以下命令创建对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

链接到我对相关问题的回答:https://stackoverflow.com/a/36311627/4344057