6

我正在尝试使这个简单的对话框半透明:

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 的颜色作为可绘制对象。我无法使该对话框半透明. 我不知道是否有可能。我想要创建的是一个对话框,如下图所示的面板:半透明控制面板。谢谢。注1:所需的最小sdk是8版本,目标是最新的(实际上是v17)。

4

6 回答 6

5

代替:

return builder1.create();

试着把这个:

Dialog dialog = builder1.create();
Drawable d = new ColorDrawable(Color.BLACK);
d.setAlpha(130);
dialog.getWindow().setBackgroundDrawable(d);
return dialog;
于 2013-07-07T19:14:51.793 回答
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 中也是如此。

于 2013-12-12T19:58:53.497 回答
1

这就是我为使用 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

于 2016-03-30T14:29:44.857 回答
0

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

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

或者

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

希望这会有所帮助。

于 2013-07-07T23:19:32.440 回答
0

您可以尝试使背景透明,如果您的超类是对话框,请使用它:

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

或者如果您的超类是 DialogFragment:

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

我的另一个解决方案类似于“kaushal trivedi”一个。使用对话框片段:

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);
  }
}

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

于 2013-09-12T10:29:43.247 回答
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);
    }
}
于 2013-12-10T09:36:57.087 回答