제목 없이 DialogFragment를 만드는 방법은 무엇입니까?
내 앱에 대한 도움말 메시지를 표시하기 위해 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");
}
대화 상자와 관련된 이 대답이 여기 Android에도 해당되는지 정말 모르겠습니다. 제목 없이 대화 상자를 만드는 방법은 무엇입니까?
이 제목 영역을 제거하려면 어떻게 해야 합니까?
이 코드 라인을 추가하면 됩니다.HelpDialog.onCreateView(...)
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
이런 식으로 제목이 없는 창을 얻으라고 명시적으로 요청하는 것입니다 :)
편집
~하듯이@DataGraham
그리고.@Blundell
아래 댓글에 지적된 바와 같이, 제목 없는 창에 대한 요청을 추가하는 것이 더 안전합니다.onCreateDialog()
대신 방법onCreateView()
이러한 방식으로 단편을 사용하지 않을 때 NPE를 성가시게 하는 것을 방지할 수 있습니다.Dialog
:
@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);
}
테마로 스타일 설정_Holo_Dialog_NoActionBar:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, android.R.style.Theme_Holo_Dialog_NoActionBar);
}
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;
}
}
안드로이드 x.프리퍼런스를 사용할 때 제안된 방법을 사용할 수 없었습니다.기본 설정DialogFragmentCompat.
궁극적으로 효과가 있었던 것은 다음 방법을 PreferenceDialogFragmentCompat에 추가하는 것이었습니다.
/**
* This is needed to get a dialog without a title.
*/
@Override
protected void onPrepareDialogBuilder(@NonNull AlertDialog.Builder builder) {
super.onPrepareDialogBuilder(builder);
builder.setTitle(null);
}
언급URL : https://stackoverflow.com/questions/15277460/how-to-create-a-dialogfragment-without-title
'source' 카테고리의 다른 글
파이썬에서 적합한 '아무것도 하지 않는' 람다 표현? (0) | 2023.09.08 |
---|---|
독트린 부울 형식을 false로 설정할 수 없습니다. (0) | 2023.09.03 |
git: 한 레포에서 커밋에 의해 도입된 변경 사항을 다른 레포에 적용합니다. (0) | 2023.09.03 |
Azure 파이프라인:치명적입니다. 'https://github.com '에 대한 사용자 이름을 읽을 수 없습니다. 터미널 프롬프트가 비활성화되었습니다. (0) | 2023.09.03 |
MySQL 및 MariaDB - 선행 0이 많은 10진수 값을 나타내는 문자열을 숫자 값으로 캐스팅하면 예기치 않은 결과를 얻을 수 있습니다. (0) | 2023.09.03 |