█ 【android學習開源項目之AndroidAutoSize】AndroidAutoSize和DialogFragment的適配
█ 相關文章:
-
● 【android學習開源項目之BasePopup】BasePopup(PopupWindow)進行二次封裝
● 【android學習開源項目之AndroidAutoSize】AndroidAutoSize和DialogFragment的適配
█ 讀前說明:
-
● 本文通過學習別人寫demo,學習一些課件,參考一些博客,’學習相關知識,如果涉及侵權請告知
● 本文只簡單羅列相關的代碼實現過程
● 涉及到的邏輯以及說明也只是簡單介紹,主要當做筆記,瞭解過程而已
█ AndroidAutoSize和DialogFragment的適配
● 在android5.2上的效果圖(圖1圖3的高度沒有全屏,圖2高度爲全屏):
● 在android9.0上的效果圖(圖2爲修改前,圖3圖4爲修改後的兩種方法):
● 博客和下載信息:(建議使用360瀏覽器,因爲我使用谷歌瀏覽器,圖片加載不了)
GitHub地址: https://github.com/JessYanCoding/AndroidAutoSize
GitHub中文README:https://github.com/JessYanCoding/AndroidAutoSize/blob/master/README-zh.md
作者博客:https://www.jianshu.com/p/4aa23d69d481
常見問題彙總:https://github.com/JessYanCoding/AndroidAutoSize/issues/13
● 最新更新記錄:
2019年11月8日 更新 BaseApplication.java
█ 我的問題:
● 在OPPO A37m上(android 5.1)上顯示正常。在雷電模擬器上(android 5.1.1)上顯示正常
● 在紅米note7 pro上(android 9)上顯示不全
█ 解決方法:
● 方法1:修改主題和佈局:
代碼:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppThemeOK1);//適配不同屏幕大小
}
佈局:
<?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="match_parent"
android:background="#cc000000"
android:gravity="right"
android:orientation="vertical">
<LinearLayout
android:layout_width="1080dp"
android:layout_height="match_parent"
android:background="#f0f2f5"
android:orientation="vertical">
●●●●●●界面內容●●●●●●
</LinearLayout>
</LinearLayout>
● 方法2:修改Dialog的尺寸大小並控制靠右顯示:
代碼:
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.RIGHT;
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
window.setLayout(dm.widthPixels * 1080 / 1440, ViewGroup.LayoutParams.MATCH_PARENT);
window.setAttributes(params);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
佈局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"-----match_parent或者1080dp效果一樣
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="1080dp"
android:layout_height="match_parent"
android:background="#f0f2f5"
android:orientation="vertical">
●●●●●●界面內容●●●●●●
</LinearLayout>
</LinearLayout>
● 方法2的補充:發現對話框高度即使設置爲MATCH_PARENT,但是還是高度沒有全屏,那麼久可以設置主題來修改:(提交的代碼裏面,這句目前是屏蔽掉,測試時可以直接開啓即可)
代碼:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, R.style.AppThemeOK2);//適配不同屏幕大小
}
█ 總結:
-
● 本demo的知識點:
1.AndroidAutoSize 的使用(今日頭條屏幕適配方案);
2.DialogFragment 的使用;
3.DialogFragment 的適配(在1440*900的寬度上面顯示1080*900的對話框,並適配不同屏幕);
4.在android5.1上面都是正常的,在android9.0上面會出現兼容問題(顯示不全);
本代碼爲java版本,帶有V7版和androidx版,帶有apk,帶有截圖;
● 如何根據設計圖創建預覽?(以適配 1080 x 1920px 爲例)
那麼如果要創建一個 1280 x 700px,就是:
● 顯示效果(可以全部展示起來,但是設置的屏幕還是偏大了):
● 完整代碼下載:
https://download.csdn.net/download/ljb568838953/12092196
█ 補充(2020年01月14日):
● 在適配過程中,遇到如下問題(前面兩行可以對齊,後面幾行沒有對齊):
● 問題:代碼實現是AppCompatActivity、Fragment和RecyclerView實現的,在初始化時RecyclerView顯示正常,當notifyDataSetChanged()後,新增的行就不對齊,整體向右便宜。
● 原因:AppCompatActivity和Fragment的總寬度設置不同導致的,AppCompatActivity的總寬度爲1440dp,Fragment的總寬度爲1280dp,所以使得notifyDataSetChanged()後,新增的行間距變大,字體變粗。
█ 相關資料:
● 1.今日頭條屏幕適配方案終極版,JessYanCoding/AndroidAutoSize
● 2.Android屏幕適配實例教程「今日頭條,AutoSize」AndroidAutoSize
● 3.AndroidAutoSize-中文說明
● 4.今日頭條屏幕適配方案終極版正式發佈!
● 5.JessYan: 今日頭條屏幕適配方案常見問題彙總,提問前必看!
● 6.Android Res下的values-sw360dp,values-sw480dp,values-swxxxdp到底是什麼東西
● 7.主流機型Device Metrics
● 8.2018-08-20 騷年你的屏幕適配方式該升級了!-今日頭條適配方案-JessYan
● 9.2018-12-18 Android 屏幕適配終結者(如何根據設計圖創建預覽?)
● 10. 2018-08-15 Android 目前穩定高效的UI適配方案
● 11. 2017-06-20 Fragment 與DialogFragment 相互之間傳遞數據
轉載請註明出處:
https://blog.csdn.net/ljb568838953/article/details/103906449