记录一下开发中碰到的自定义对话框需要更改为Activity 样式,全屏, 有输入框被键盘遮挡的解决方式:
1.布局文件写法:
<?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="wrap_content"
android:background="@drawable/bg_main"
android:orientation="vertical" >
<!-- top text -->
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="90dp"
android:layout_marginTop="@dimen/maintitle_margin_top"
android:background="@drawable/bg_title" >
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:background="@drawable/transparent_background"
android:gravity="center_vertical"
android:text="@string/btn_cancel"
android:textColor="@color/brown"
android:textSize="26sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:text="@string/btn_add_wifi"
android:textColor="@color/brown"
android:textSize="26sp" />
<Button
android:id="@+id/btn_ok"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_marginRight="18dp"
android:background="@drawable/transparent_background"
android:gravity="center_vertical"
android:text="@string/btn_wifi_confirm"
android:textColor="@color/brown"
android:textSize="26sp" />
</RelativeLayout>
<LinearLayout
android:layout_width="600dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="100dp"
android:gravity="center_horizontal"
android:orientation="vertical" >
<!-- SSID -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:minWidth="200dp"
android:text="@string/pre_ssid"
android:textColor="@color/brown"
android:textSize="26sp" />
<EditText
android:id="@+id/ssid"
android:layout_width="561dp"
android:layout_height="wrap_content"
android:hint="@string/wifi_ssid"
android:imeOptions="actionDone"
android:singleLine="true"
android:textColor="@color/brown"
android:textSize="24.0sp" />
</LinearLayout>
<!-- Safety -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="right"
android:minWidth="200dp"
android:text="@string/pre_safety"
android:textColor="@color/brown"
android:textSize="26sp" />
<Spinner
android:id="@+id/security"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/wifi_security"
android:spinnerMode="dropdown" />
</LinearLayout>
<LinearLayout
android:id="@+id/fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:visibility="visible" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="right"
android:minWidth="200dp"
android:text="@string/pre_pwd"
android:textColor="@color/brown"
android:textSize="26sp" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:hint="@string/wifi_password"
android:imeOptions="actionDone"
android:singleLine="true"
android:textColor="@color/brown"
android:textSize="24.0sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
2.对话框的style:
<style name="daPingMuDialog" parent="@android:Theme.Dialog">
<item name="android:windowFrame">@android:color/transparent</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<!-- <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> -->
</style>
3.对应Activity的键盘弹出模式:
<activity
android:name="com.lenkeng.framesettings.activity.WifiSettings"
android:launchMode="singleTask"
android:screenOrientation="landscape"
android:exported="true"
>
4.在Dialog的构造函数中加载style 样式:
public WifiDialog(Activity context, View.OnClickListener listener,
AccessPoint accessPoint, boolean edit) {
super(context, R.style.daPingMuDialog);
mContext = context;
this.edit = edit;
mListener = listener;
mAccessPoint = accessPoint;
mSecurity = (accessPoint == null) ? AccessPoint.SECURITY_NONE
: accessPoint.security;
}
5.在Dialog 的onCreate 中设置window 属性:
@Override
protected void onCreate(Bundle savedInstanceState) {
mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
setContentView(mView);
// setInverseBackgroundForced(true);
setCancelable(true);
Window window = getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width= WindowManager.LayoutParams.MATCH_PARENT;
lp.height=WindowManager.LayoutParams.MATCH_PARENT;
lp.dimAmount = 1f;
getWindow().setAttributes(lp);
...
}