android現(xiàn)有項目輕微改動適配平板心得
最近已經(jīng)開發(fā)好幾年的項目需要適配平板,同時平板上面需要橫豎屏進行切換,還要在手機上能夠正常使用,經(jīng)過調(diào)研以后,在改動最小的情況下,對項目進行必要的修改,完成相應(yīng)的需求,現(xiàn)在將大概的思路和涉及到的內(nèi)容整理如下:
清單文件放開強制橫豎屏的限制
橫豎屏切換時頁面需要重繪,生命周期會重新走,為了防止多次重復走生命周期,在清單文件中進行設(shè)置
android:configChanges="keyboardHidden|orientation|screenSize"
對界面進行分屏處理
左右分屏,base中進行橫向和豎向判斷,進行全屏或者占屏幕幾份的處理(初次加載)
@Override protected void onStart() { super.onStart(); setScreenDirection(); } private void setScreenDirection() { boolean screenDirection = ScreenDirectionUtil.getInstance().getScreenDirection(this); if (screenDirection) { ScreenDirectionUtil.getInstance().setScreenProportion(this,1,1,2); }else { ScreenDirectionUtil.getInstance().setScreenProportion(this,5,3,2); } }
由于設(shè)置了configChanges,橫豎屏切換時生命周期不再走,在onConfigurationChanged中判斷橫豎屏方向,進行屏幕占比動態(tài)配置
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) { // 橫屏 ScreenDirectionUtil.getInstance().setScreenProportion(this,5,3,2); }else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT) { // 豎屏 ScreenDirectionUtil.getInstance().setScreenProportion(this,1,1,2); } }
設(shè)置activity的穿透點擊,平板的左側(cè)一級頁面可以一直點擊
清單文件中給activity設(shè)置style
android:theme="@style/transparent_activity" <style name="transparent_activity" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> </style>
activity中設(shè)置可穿透點擊
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
屏幕的占比動態(tài)設(shè)置方法
/** * 設(shè)置屏幕的橫向比例 * * @param context * @param proportion 屏幕分成幾份 * @param number 占用屏幕份數(shù) * @param position 1: 左 2: 右 */ public void setScreenProportion(Activity context, int proportion,int number,int position) { // 為獲取屏幕寬、高 Display display = context.getWindowManager().getDefaultDisplay(); Window win = context.getWindow(); win.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = win.getAttributes(); if (proportion > 1){ lp.width = (int) (display.getWidth() * number / proportion); }else { lp.width = WindowManager.LayoutParams.MATCH_PARENT; } lp.height = WindowManager.LayoutParams.MATCH_PARENT; //設(shè)置對話框置頂顯示 lp.gravity = Gravity.TOP; //設(shè)置對話框置頂顯示 if (position == 1) { lp.gravity = Gravity.LEFT; }else { lp.gravity = Gravity.RIGHT; } win.setAttributes(lp); }
是否是平板的判斷方法
/** * 判斷是否是平板 * @param context * @return true: 平板 false:不是平板 */ public boolean isPad(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; }
判斷是橫屏還是豎屏
/** * 獲取屏幕方向 * * @param context * @return true: 豎屏 false: 橫屏 */ public boolean getScreenDirection(Context context) { DisplayMetrics d = context.getResources().getDisplayMetrics(); if (d.heightPixels > d.widthPixels) { return true; } return false; }
上面的是主要涉及到的相關(guān)注意事項和用到的方法
以上就是android現(xiàn)有項目輕微改動適配平板心得的詳細內(nèi)容,更多關(guān)于android現(xiàn)有項目適配平板的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Bitmap詳解及Bitmap的內(nèi)存優(yōu)化
這篇文章主要介紹了Android Bitmap詳解及Bitmap的內(nèi)存優(yōu)化的相關(guān)資料,Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件,需要的朋友可以參考下2017-03-03Flutter Widget移動UI框架使用Material和密匙Key實戰(zhàn)
這篇文章主要為大家介紹了Flutter Widget移動UI框架使用Material和密匙Key實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12