2013-07-07 8 views
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を使用することから、アルファフィールドを0.5に設定すること、drawableとして0に等しい色を使用することに、私はそのダイアログを半透明にすることはできません。私はそれが可能であってもわからない。 私が作成したいのは、次の画像のパネルのようなダイアログです:semi-transparent control panel。おかげさまで 注1:必要な最小sdkはバージョン8で、ターゲットは最新(実際はv17)です。

+0

:その後、

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

リンクカスタムスタイルを作成し

SDKのバージョン。 1.6のダイアログでは、デフォルトで半透明ですが、テーマが 'android.R.style.Theme_Dialog 'の場合、' AlertDialog.Builder(Context context、int theme) 'を試してください。 – techiServices

+0

XMLで 'android:background ="#4000 "'のようなものを使ってみましたか? (#4000はARGB_4444色空間です)。 – techiServices

+0

私は両方を試しましたが、うまくいきませんでした。 –

答えて

5

の代わりに:

return builder1.create(); 

これを入れてみてください:

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

私はそのコードをどこに置くべきですか? –

+0

私は私の答えを編集しました。 –

+0

動作しませんでした。ダイアログは常に地獄のように黒いです!私のポストアップデートを見て、私はダイアログになりたいものを見てください。 –

0

あなたのダイアログフラグメント参照の上、これらの2つのテーマのいずれかを試すことができます。

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

または

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

これが役立つことを願っています。

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

これはあなたのダイアログがフルスクリーン、背景なしになりますので、あなたは、あなたがそれの内側にほしいと思うものを置くことができます。

+0

これは、ダイアログとウィンドウの間にマージンが必要な場合に実行可能な解決策ではありません。 – plopd

0

は、あなたが同様にあなたのダイアログのonCreateViewに

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

を置くことができ、この

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); 
    } 
} 
1
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    return dialog; 
} 

を試してみてください。

関連する問題