自定義對話方塊全屏模式(模擬Activity)
記錄一下開發中碰到的自定義對話方塊需要更改為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);
...
}