android現(xiàn)有項目輕微改動適配平板心得
最近已經(jīng)開發(fā)好幾年的項目需要適配平板,同時平板上面需要橫豎屏進(jìn)行切換,還要在手機上能夠正常使用,經(jīng)過調(diào)研以后,在改動最小的情況下,對項目進(jìn)行必要的修改,完成相應(yīng)的需求,現(xiàn)在將大概的思路和涉及到的內(nèi)容整理如下:
清單文件放開強制橫豎屏的限制
橫豎屏切換時頁面需要重繪,生命周期會重新走,為了防止多次重復(fù)走生命周期,在清單文件中進(jìn)行設(shè)置
android:configChanges="keyboardHidden|orientation|screenSize"
對界面進(jìn)行分屏處理
左右分屏,base中進(jìn)行橫向和豎向判斷,進(jìn)行全屏或者占屏幕幾份的處理(初次加載)
@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中判斷橫豎屏方向,進(jìn)行屏幕占比動態(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)有項目輕微改動適配平板心得的詳細(xì)內(nèi)容,更多關(guān)于android現(xiàn)有項目適配平板的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android使用ScrollView實現(xiàn)滾動效果
這篇文章主要為大家詳細(xì)介紹了Android使用ScrollView實現(xiàn)滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-01-01
談?wù)凙ndroid的三種網(wǎng)絡(luò)通信方式
Android平臺有三種網(wǎng)絡(luò)接口可以使用,他們分別是:java.net.*(標(biāo)準(zhǔn)Java接口)、Org.apache接口和Android.net.*(Android網(wǎng)絡(luò)接口)。本文詳細(xì)的介紹,有興趣的可以了解一下。2017-01-01
詳解Android中通過Intent類實現(xiàn)組件間調(diào)用的方法
Intent能夠?qū)崿F(xiàn)應(yīng)用間的數(shù)據(jù)交互與通訊,將實現(xiàn)者和調(diào)用者解耦,接下來就來詳解Android中通過Intent類實現(xiàn)組件間調(diào)用的方法,需要的朋友可以參考下2016-05-05
Android常用控件ImageSwitcher使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android常用控件ImageSwitcher的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
淺談Android Studio 4.1 更新內(nèi)容
這篇文章主要介紹了淺談Android Studio 4.1 更新內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

