사용자 정의 알림 대화 상자를 작성하고 표시 할 수는 있지만 android:layout_width/height="fill_parent"
대화 상자 xml에는 내용만큼 큽니다.
내가 원하는 것은 20 픽셀의 패딩을 제외하고 전체 화면을 채우는 대화 상자입니다. 그런 다음 대화 상자의 일부인 이미지는 fill_parent를 사용하여 전체 대화 상자 크기로 자동 확장됩니다.
답변
이 토론 그룹 게시물의 Android 플랫폼 개발자 Dianne Hackborn에 따르면 Dialogs는 Window의 최상위 레이아웃 너비와 높이를로 설정했습니다 WRAP_CONTENT
. 대화 상자를 더 크게 만들기 위해 해당 매개 변수를로 설정할 수 있습니다 MATCH_PARENT
.
데모 코드 :
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
대화 상자가 표시된 후에 속성이 설정됩니다. 시스템 설정 시점에 문제가 있습니다. 대화 상자가 처음 표시 될 때 레이아웃 엔진이 설정해야한다고 생각합니다.
Theme.Dialog를 확장 하여이 작업을 수행하는 것이 좋습니다. 그러면 setAttributes를 호출 할 때 추측 게임을 할 필요가 없습니다. (대화 상자에서 적절한 밝거나 어두운 테마 또는 Honeycomb Holo 테마를 자동으로 채택하는 것이 약간 더 많은 작업이지만 http://developer.android.com/guide/topics/ui/themes 에 따라 수행 할 수 있습니다 . html # SelectATheme )
답변
RelativeLayout
대신 사용자 정의 대화 상자 레이아웃을 래핑하십시오 LinearLayout
. 그것은 나를 위해 일했다.
답변
대화 상자 창에서 FILL_PARENT를 지정하면 다른 사람들이 제안한 것처럼 전체 화면을 채우기 위해 검은 색 대화 상자 배경을 늘 렸기 때문에 (Android 4.0.4에서) 작동하지 않았습니다.
제대로 작동하는 것은 최소 표시 값을 사용하지만 코드 내에서 지정하여 대화 상자가 화면의 90 %를 차지하도록하는 것입니다.
그래서:
Activity activity = ...;
AlertDialog dialog = ...;
// retrieve display dimensions
Rect displayRectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
// inflate and adjust layout
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_dialog_layout, null);
layout.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
layout.setMinimumHeight((int)(displayRectangle.height() * 0.9f));
dialog.setView(layout);
일반적으로 대부분의 경우 너비 조정만으로 충분합니다.
답변
설정 android:minWidth
및 android:minHeight
사용자 정의보기 XML이다. 이로 인해 경고가 내용 크기 만 랩핑하지 않도록 할 수 있습니다. 이와 같은보기를 사용하면해야합니다.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="300dp"
android:minHeight="400dp">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/icon"/>
</LinearLayout>
답변
더 간단한 방법은 다음과 같습니다.
int width = (int)(getResources().getDisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.90);
alertDialog.getWindow().setLayout(width, height);
답변
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
답변
여기에있는 다른 모든 대답은 의미가 있지만 Fabian의 요구를 충족시키지 못했습니다. 여기 내 해결책이 있습니다. 완벽한 해결책은 아니지만 저에게 효과적입니다. 전체 화면에있는 대화 상자가 표시되지만 위쪽, 아래쪽, 왼쪽 또는 오른쪽에 패딩을 지정할 수 있습니다.
먼저 이것을 res / values / styles.xml에 넣으십시오.
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@color/Black0Percent</item>
<item name="android:paddingTop">20dp</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowIsFloating">false</item>
</style>
보시다시피 android : paddingTop = 20dp 가 기본적으로 필요한 것입니다. 안드로이드 : windowBackground = @ 색상 / Black0Percent가 단지 색상 코드 내 color.xml 선언이다
입술 / 값 /color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="Black0Percent">#00000000</color>
</resources>
해당 색상 코드는 대화 상자의 기본 창 배경을 0 % 투명도 색상으로 대체하기위한 더미 역할을합니다.
다음 사용자 정의 대화 상자 레이아웃 res / layout / dialog.xml을 빌드하십시오.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialoglayout"
android:layout_width="match_parent"
android:background="@drawable/DesiredImageBackground"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edittext1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textSize="18dp" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Dummy Button"
android:textSize="18dp" />
</LinearLayout>
마지막으로 dialog.xml을 사용하는 사용자 정의보기를 설정하는 대화 상자가 있습니다.
Dialog customDialog;
LayoutInflater inflater = (LayoutInflater) getLayoutInflater();
View customView = inflater.inflate(R.layout.dialog, null);
// Build the dialog
customDialog = new Dialog(this, R.style.CustomDialog);
customDialog.setContentView(customView);
customDialog.show();
결론 : CustomDialog라는 styles.xml에서 대화 상자 테마를 대체하려고했습니다. 대화 창 레이아웃을 재정의하고 패딩을 설정하고 배경의 불투명도를 변경할 수있는 기회를 제공합니다. 완벽한 해결책은 아니지만 도움이 되길 바랍니다 .. 🙂