カスタムDialogFragment
を作成しています。ダイアログのレイアウトはmy_dialog.xml
に設定されていますが、ダイアログの周囲の色(透明な灰色)を変更するにはどうすればよいですか?
my_dialog.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<TextView
Android:id="@+id/hello"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:background="@Android:color/holo_orange_light"
Android:gravity="center"
Android:text="hello" />
</RelativeLayout>
MyDialogFragment.Java
public class MyDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_dialog, container);
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return view;
}
}
ダイアログスタイルでAndroid:windowIsFloating
をfalseに、Android:windowBackground
をカスタムカラーに設定する必要がありました。
styles.xml
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowBackground">@color/orange_transparent</item>
<item name="Android:windowIsFloating">false</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowTitleStyle">@null</item>
<item name="Android:colorBackgroundCacheHint">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:gravity">center</item>
</style>
</resources>
MyDialogFragment
public class MyDialogFragment extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.MyDialog);
}
}
私はDialogFragment
の透明な背景が欲しかったのですが、コードではこれはうまくいきます:
_@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(Android.R.color.transparent);
}
_
もちろん、setBackgroundDrawable()
またはsetBackgroundDrawableResource()
を使用して、任意の色またはDrawable
を指定できます。
これは少なくともonStart()
では機能しますが、onCreate()
では機能せず、必ずしもonCreateView()
、 と思われる 。
とはいえ、ほとんどの場合、次の行に沿って XMLでスタイルを使用して を実行する方がおそらくきれいです。
_<style name="MyDialogStyle" parent="@Android:style/Theme.Holo.Light.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
_
完全に透明なダイアログを取得するには、onCreateView
で以下を設定できます。
setBackgroundDrawable
からColor.TRANSPARENT
setDimAmount
から0
こちらのコード例をご覧ください:
public class TextEditor extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_text_editor, container);
// make dialog itself transparent
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// remove background dim
getDialog().getWindow().setDimAmount(0);
//[add more custom code here...]
return view;
}
}
私はこれをするだけでいいことがわかりました:
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<!-- other attributes -->
<item name="Android:backgroundDimEnabled">false</item>
</style>
OnCreateをオーバーライドし、そこでスタイルを設定すると動作するはずです。
@Override
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setStyle(DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent);
}
'onCreateDialog
'ではなく 'onCreateView
'でAlertDialog Builderを使用している人は、次のコードのようにテーマを割り当てることができます。テーマの完全なセットは R.style から見つけることができます。それらの一部は最近サポートされ、古いデバイスの電話では利用できないことを忘れないでください。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
builder.setView(view);
return builder.create();
}
7月の答えは私にとってほとんど良いものでした。しかし、AlertDialog.Builderを使用すると機能しないようです。
ここでスタイルを設定する必要がありました。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialog );
Background
のText XML
を変更します
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<TextView
Android:id="@+id/hello"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:gravity="center"
Android:text="hello" />
TextView
の高さと幅を100dpに指定したためです。ダイアログ全体を埋める背景を設定します。メインレイアウトはwrap_contentであるため。それがあなたを助けたなら、答えを受け入れてください。
編集:background
を変更するには、レイアウトまたはテキストビューに追加しますAndroid:background="#232323"
これらの番号を好きな色に変更できます。または、drawable
から背景を設定できますAndroid:background="@drawable/yourpicturename"