私のアプリに関するヘルプメッセージを表示するためのDialogFragmentを作成しています。 1つだけでなく、すべて問題なく動作します。ウィンドウの上部には、DialogFragmentを表示する黒い縞模様があります。これは、タイトル用に予約されているため、使用したくないものです。
私のカスタムDialogFragmentは白の背景を使用しているので、これは特に痛いです。そのため、変更は脇に残すにはあまりにも悪名高いです。
もっとグラフィカルな方法でこれを示しましょう。
DialogFragmentのXMLコードは次のとおりです。
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout
Android:id="@+id/holding"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/dialog_fragment_bg"
>
<!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados -->
<LinearLayout
Android:id="@+id/confirmationToast"
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
>
<TextView Android:id="@+id/confirmationToastText"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:text="@string/help_dialog_fragment"
Android:textColor="#AE0000"
Android:gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
Android:id="@+id/confirmationButtonLL"
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="center_horizontal"
>
<Button Android:id="@+id/confirmationDialogButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:layout_marginBottom="60dp"
Android:background="@drawable/ok_button">
</Button>
</LinearLayout>
</LinearLayout>
</ScrollView>
そしてDialogFragmentを実装するクラスのコード:
public class HelpDialog extends DialogFragment {
public HelpDialog() {
// Empty constructor required for DialogFragment
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Inflate the XML view for the help dialog fragment
View view = inflater.inflate(R.layout.help_dialog_fragment, container);
TextView text = (TextView)view.findViewById(R.id.confirmationToastText);
text.setText(Html.fromHtml(getString(R.string.help_dialog_fragment)));
//get the OK button and add a Listener
((Button) view.findViewById(R.id.confirmationDialogButton)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// When button is clicked, call up to owning activity.
HelpDialog.this.dismiss();
}
});
return view;
}
}
そして、メインアクティビティの作成プロセス:
/**
* Shows the HelpDialog Fragment
*/
private void showHelpDialog() {
Android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
HelpDialog helpDialog = new HelpDialog();
helpDialog.show(fm, "fragment_help");
}
Dialogに関連したこの答えがここにも当てはまるかどうか、私は本当にわかりません Android:タイトルなしでDialogを作成する方法?
どうすればこのタイトル領域を削除できますか?
このコード行をHelpDialog.onCreateView(...)
に追加するだけです。
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
このようにして、あなたは明示的にタイトルなしのウィンドウを手に入れたいと思っています:)
EDIT
以下のコメントで@DataGraham
と@Blundell
が指摘したように、onCreateDialog()
ではなくonCreateView()
メソッドにタイトルなしウィンドウのリクエストを追加するほうが安全です。こうすることで、フラグメントをDialog
として使用していないときに、NPEの煩わしさを防ぐことができます。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
// request a window without the title
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
ダイアログフラグメントにはsetStyleメソッドがあります。これはビューの作成前に呼び出す必要があります Java Doc 。ダイアログのスタイルも同じ方法で設定できます
public static MyDialogFragment newInstance() {
MyDialogFragment mDialogFragment = new MyDialogFragment();
//Set Arguments here if needed for dialog auto recreation on screen rotation
mDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
return mDialogFragment;
}
FragmentManager manager = getSupportFragmentManager();
SettingsDialog sd = new SettingsDialog();
sd.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
sd.show(manager, "settings_dialog");
簡単な方法を試してください
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, 0);
}
public class LoginDialog extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.login_dialog, null);
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return view;
}
}
スタイルをTheme_Holo_Dialog_NoActionBarに設定します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, Android.R.style.Theme_Holo_Dialog_NoActionBar);
}