DialogFragment 너비를 Fill_Parent로 만드는 방법
안녕하세요 저는 DialogFragment
대화 상자를 표시하는 데 사용하는 Android 응용 프로그램에서 작업 중이지만 너비가 매우 작습니다. 이 너비를 어떻게 만들 fill_parent
수 있습니까?
public class AddNoteDialogFragment extends DialogFragment {
public AddNoteDialogFragment() {
// Empty constructor required for DialogFragment
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().setTitle(getString(R.string.app_name));
View view = inflater.inflate(R.layout.fragment_add_note_dialog,
container);
return view;
}
@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;
}
}
fragment_add_note_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<EditText
android:id="@+id/addNoteEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="@string/clock_enter_add_note"
android:imeOptions="actionDone"
android:inputType="textCapSentences|textMultiLine"
android:lines="5" />
<Button
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/login_button"
android:text="@string/submit_button"
android:textColor="@android:color/white" />
</LinearLayout>
미리 감사드립니다.
이것이이 문제를 처리하기 위해 알아 낸 해결책입니다.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
}
편집하다:
onCrateView
부풀린보기를 반환하기 전에 Fragment 메서드 에서 아래 코드를 사용할 수 있습니다 .
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
경고 대화 상자를 화면 크기의 90 %로 채우는 방법에서 Elvis의 답변을 사용해 보셨습니까 ?
다음과 같습니다.
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
최신 정보:
위의 코드는 내부에 추가되어야 onStart()
의 방법 DialogFragment
.
LayoutParams.FILL_PARENT
LayoutParams.MATCH_PARENT
대신 사용되지 않습니다 .
이것은 나를 위해 일했습니다.
나만의 스타일 만들기 :
<style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog">
<item name="android:windowMinWidthMajor">97%</item>
<item name="android:windowMinWidthMinor">97%</item>
</style>
대화에서이 스타일 사용
public class MessageDialog extends DialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
}
// your code
}
저에게는 onCreateView에서 부풀린 레이아웃의 LinearLayout 부모를 RelativeLayout으로 대체했을 때 작동했습니다. 다른 코드 변경이 필요하지 않습니다.
<!-- A blank view to force the layout to be full-width -->
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_gravity="fill_horizontal" />
내 대화 레이아웃의 상단에서 트릭을 수행했습니다.
public class FullWidthDialogFragment extends AppCompatDialogFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_AppCompat_Light_Dialog_Alert);
}
}
훨씬 더 많은 유연성을 원한다면 AppCompat_Dialog_Alert 및 사용자 정의 속성을 확장 할 수 있습니다.
제 경우에는 다음 접근 방식도 사용했습니다.
@Override
public void onStart() {
super.onStart();
getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height));
}
}
그러나 일부 Lollipop + 기기 (예 : Nexus 9)에서는 대화 상자의 왼쪽과 오른쪽 가장자리와 화면 가장자리 사이에 여전히 작은 간격 이있었습니다 .
분명하지는 않았지만 마침내 모든 장치와 플랫폼에서 전체 너비 로 만들려면 창 배경 을 다음과 같이 styles.xml 내에 지정해야한다는 것을 알아 냈습니다 .
<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:padding">0dp</item>
<item name="android:windowBackground">@color/window_bg</item>
</style>
물론 다음과 같은 대화 상자를 만들 때이 스타일을 사용해야합니다.
public static DialogFragment createNoTitleDlg() {
DialogFragment frag = new Some_Dialog_Frag();
frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
return frag;
}
부작용없이 나를 위해 작동하는 또 다른 솔루션은 다음과 같습니다.
DialogFragment를 확장하는 클래스에서 :
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
}
스타일 :
<style name="DialogStyle" parent="ThemeOverlay.AppCompat.Dialog.Alert"></style>
나는 이것을 명확히하고 싶다. 두 가지 방법 모두 옳지 만 DialogFragment가 다릅니다 .
사용 android.app.DialogFragment
@Override
public void onStart()
{
super.onStart();
Dialog dialog = getDialog();
if (dialog != null)
{
int width = ViewGroup.LayoutParams.MATCH_PARENT;
int height = ViewGroup.LayoutParams.MATCH_PARENT;
dialog.getWindow().setLayout(width, height);
}
}
사용 android.support.v4.app.DialogFragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}
다른 솔루션을 기반으로 직접 만들었습니다.
<style name="AppTheme.Dialog.Custom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>
</style>
abstract class BaseDialogFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.AppTheme_Dialog_Custom)
}
}
style.xml 파일에서 사용자 정의 스타일을 작성하십시오. 이 코드를 style.xml 파일에 복사하여 붙여 넣으십시오.
<style name="CustomDialog" parent="@android:style/Theme.Holo.Light" >
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">true</item>
</style>
그런 다음 DialogFragment의 createDialog 메서드에서 코드로 대화 개체를 만듭니다.
dialog = new Dialog(getActivity(), R.style.CustomDialog);
이것은 나를 위해 일하고 이것이 당신에게도 도움이되기를 바랍니다.
DialogFragment의 onCreateView 메서드에서 이것을 사용하십시오.
Display display = getActivity().getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, **220**, getResources().getDisplayMetrics());
getDialog().getWindow().setLayout(width,px);
220 은 대화 조각 높이이며 원하는대로 변경하십시오.
DialogFragment 내부의 사용자 AlertDialog.Builder. onCreateDialog
이와 같은 방법으로 추가하십시오 . 그리고 onCreateView
아무것도하지 마십시오.
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
View view = LayoutInflater.from(getContext()).inflate(R.layout.gf_confirm_order_timeout_dialog, null);
final Bundle args = getArguments();
String message = args.getString(GfConstant.EXTRA_DATA);
TextView txtMessage = (TextView) view.findViewById(R.id.txt_message);
txtMessage.setText(message);
view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (mListener != null)
{
mListener.onDialogConfirmOK();
}
}
});
builder.setView(view);
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
레이아웃 루트에서 android : minWidth를 매우 큰 값으로 설정하십시오.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="9999999dp">
...
</LinearLayout>
이것이 내가이 문제에 직면했을 때 내가 해결 한 방법입니다. 이 시도.
DialogFragment의 onActivityCreated에서 필요에 따라이 코드를 추가합니다 ....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
myview=inflater.inflate(R.layout.fragment_insurance_detail, container, false);
intitviews();
return myview;
}
@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
getDialog().getWindow().setGravity(Gravity.CENTER);
}
참고 URL : https://stackoverflow.com/questions/23990726/how-to-make-dialogfragment-width-to-fill-parent
'Nice programing' 카테고리의 다른 글
예외가 안전하게 처리 될 때 첫 번째 예외 메시지 방지 (0) | 2020.10.17 |
---|---|
MySQL 매개 변수화 된 쿼리 (0) | 2020.10.17 |
Perl의 일반적인 문제? (0) | 2020.10.17 |
PreferenceScreen의 TimePicker (0) | 2020.10.17 |
Java 사용자가 자주 예외를 조용히 사용하는 이유는 무엇입니까? (0) | 2020.10.17 |