問題描述:我這裡要實現一個拍照的功能,點擊拍照,彈出一個Dialog顯示你拍的照片並提示你是否保存,這時我還沒有保存,然後我切換屏幕變成橫屏,這時Dialog只顯示了一半,提示你保存的那一部分沒有了,不知道什麼原因。
下面是我創建Dialog的代碼:
private intiBuilderDialog() {
if (builder == null || !builder.isShowing()) {
builder = new Dialog(SamplingCamActivity.this, R.style.mydialog);
builder.setContentView(R.layout.img);
LayoutParams lay = builder.getWindow().getAttributes();
setParams(lay);
builder.show();
}
}
private void setParams(LayoutParams lay) {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
Rect rect = new Rect();
View view = getWindow().getDecorView();
view.getWindowVisibleDisplayFrame(rect);
lay.height = dm.heightPixels - rect.top;
lay.width = dm.widthPixels;
}
下面是創建Dialog的Style:
<style name="mydialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>`enter code here
下面是Dialog的xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/camera_preview_back"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check_picture"
android:textColor="#ffffff"
android:textSize="@dimen/TitleTextSize"
android:textStyle="bold"
android:paddingLeft="20dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"/>
<View
android:layout_width="fill_parent"
android:layout_height="1.0px"
android:background="@drawable/camera_preview_line" />
<ImageView
android:id="@+id/ImageView01"
android:layout_width="240dp"
android:layout_height="320dp"
android:layout_gravity="center"
android:layout_margin="10.0dip" />
<View
android:layout_width="fill_parent"
android:layout_height="1.0px"
android:background="@drawable/camera_preview_line" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" >
<Button
android:id="@+id/preview_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="center_vertical"
android:layout_marginRight="10.0dip"
android:text="@string/cancel"
android:background="@drawable/image_icon"
android:textColor="@drawable/text_color"/>
<Button
android:id="@+id/preview_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="10.0dip"
android:layout_toLeftOf="@id/preview_cancel"
android:text="@string/accept"
android:background="@drawable/image_icon"
android:textColor="@drawable/text_color" />
</RelativeLayout>
</LinearLayout>
下面是我在橫堅屏切換時作的處理:也就是重新再創建一遍Dialog:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if (builder != null && builder.isShowing()) {
builder.dismiss();
intiBuilderDialog();
}
}
如果是自己寫布局生成Dialog的話,橫豎屏是不是應該寫兩套分別加載才好,android源碼中音樂播放器的自定義dialog布局都是橫豎屏區分的。