1、自定义Dialog
/**
* @Title: WeatherDialog.java
* @Package com.sq.hbt.view
* @Description: TODO(用一句话描述该文件做什么)
* @author
* @date 2015-10-20 上午10:28:13
* @version V1.0
*/
package com.sq.hbt.view;
import android.app.Dialog;
import android.content.Context;
import android.view.Display;
import android.view.Gravity;
import android.view.WindowManager;
import com.sq.hbt.R;
/**
* @ClassName: WeatherDialog
* @Description: TODO(这里用一句话描述这个类的作用)
* @author
* @date 2015-10-20 上午10:28:13
*
*/
public class WeatherDialog extends Dialog {
public WeatherDialog(Context context) {
this(context, R.style.WeatherDialog);
}
public WeatherDialog(Context context, int theme) {
super(context, theme);
this.setContentView(R.layout.dialog_weather);
WindowManager m = getWindow().getWindowManager();
Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高
android.view.WindowManager.LayoutParams p = getWindow().getAttributes();
p.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
p.y = (int) (d.getHeight() * 0.1); // 新位置Y坐标
p.width = (int) (d.getWidth() * 0.9); // 宽度设置为屏幕的0.8
// p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.7
p.alpha = 1.0f; // 透明度
getWindow().setAttributes(p);
}
}
2、调用初始化
WeatherDialog wtherdg;
// 创建并初始化Dialog
wtherdg = new WeatherDialog(MainActivity.this);
wtherdg.setCanceledOnTouchOutside(true);
wtherdg.show();
常见问题:
1、Dialog怎样自动适配布局?
宽度可以根据屏幕设置。(如上文所述)
高度不用设置,默认即可。
2、初始化布局时报错如下
FATAL EXCEPTION: main
Process: com.sq.hbt.weather, PID: 24612
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:595)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:270)
...
...
原因:初始化时上下文获取方式问题
wtherdg = new WeatherDialog(getApplicationContext());错误写法
必须是如下写法
wtherdg = new WeatherDialog(MainActivity.this);正确写法
附件代码:R.style.WeatherDialog
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
<style name="WeatherDialog" parent="@style/CustomDialog">
<item name="android:windowBackground">@drawable/shape_weather_dialog</item>
<item name="android:windowNoTitle">true</item>
</style>
附件代码:R.layout.dialog_weather
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_gray_background" >
<LinearLayout
android:id="@+id/ll_forecast1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal" >
<RelativeLayout
android:id="@+id/rl_fc_date1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="0dp"
android:layout_marginTop="5dp"
android:background="@color/color_top_blue"
android:text="今天"
android:textColor="@color/color_white" />
<TextView
android:id="@+id/tv_date1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="30dp"
android:layout_marginTop="5dp"
android:text="----日"
android:textColor="@color/color_black"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_week1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_date1"
android:layout_below="@+id/tv_date1"
android:layout_marginTop="5dp"
android:text="星期----"
android:textColor="@color/color_black"
android:textSize="13sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_fc_day1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:gravity="left" >
<TextView
android:id="@+id/tv_day_wendu1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="高温----℃"
android:textColor="@color/color_orange_dark"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_day_type1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_day_wendu1"
android:layout_marginTop="2dp"
android:text="白天气象--"
android:textColor="@color/color_orange_dark"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_day_feng1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_day_type1"
android:layout_marginTop="2dp"
android:text="风向--风力--级"
android:textColor="@color/color_orange_dark"
android:textSize="13sp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_fc_night1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="left" >
<TextView
android:id="@+id/tv_night_wendu1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="低温----℃"
android:textColor="@color/color_blue_mid"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_night_type1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_night_wendu1"
android:layout_marginTop="2dp"
android:text="夜晚气象--"
android:textColor="@color/color_blue_mid"
android:textSize="13sp" />
<TextView
android:id="@+id/tv_night_feng1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_night_type1"
android:layout_marginTop="2dp"
android:text="风向--风力--级"
android:textColor="@color/color_blue_mid"
android:textSize="13sp" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>