亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

android 分辨率適配的方法

系統 1983 0

首先說明一點 :這個方法不能說萬能的,但是最起碼它解決了分辨率跟密集度的關系,就是所有分辨率,只要傳了第一次的參數,后面都不需要改動了,但是也引來一個問題,就是布局會因為圖片資源小而失真,所以這也需要美工的同志多多配合的,廢話不說,貼代碼:

第一步,先創建一個view信息的javabean類:

      
        package
      
      
         com.zte.layout.adapter;


      
      
        import
      
      
         android.view.View;


      
      
        /**
      
      
        
 * 存儲View信息的JavaBean類
 * 
 * 
      
      
        @author
      
      
         
 * 
 
      
      
        */
      
      
        public
      
      
        class
      
      
         LayoutInformation
{
        
      
      
        /**
      
      
        
         * View的對象
         
      
      
        */
      
      
        private
      
      
         View view;

        
      
      
        /**
      
      
        
         * View的寬度
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewWidth;

        
      
      
        /**
      
      
        
         * View的高度
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewHeight;

        
      
      
        /**
      
      
        
         * View距左邊的距離,即marginLeft
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewMarginLeft;

        
      
      
        /**
      
      
        
         * View距頂部的距離,即MarginTop;
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewMarginTop;
        
        
      
      
        /**
      
      
        
         * 父類布局的類型為相對布局
         
      
      
        */
      
      
        public
      
      
        static
      
      
        int
      
       R=-1
      
        ;
        
        
      
      
        /**
      
      
        
         * 父類布局的類型為線性布局
         
      
      
        */
      
      
        public
      
      
        static
      
      
        int
      
       L=-2
      
        ;
        
        
      
      
        /**
      
      
        
         * 此View的父類布局的類型
         
      
      
        */
      
      
        private
      
      
        int
      
      
         parentLayoutType;

        
      
      
        /**
      
      
        
         * 存儲View信息的JavaBean類
         * 
         * 
      
      
        @param
      
      
         view
         *            View的對象
         * 
      
      
        @param
      
      
         viewWidth
         *            View的寬
         * 
      
      
        @param
      
      
         viewHeight
         *            View的高
         * 
      
      
        @param
      
      
         viewMarginLeft
         *            View距左邊的距離
         * 
      
      
        @param
      
      
         viewMargdoubleop
         *            View距上部的距離
         * 
      
      
        @param
      
      
         parentLayoutType
         *            父類布局的類型,LayoutInformation.R
         *            (表示相對布局)或者LayoutInformation.L(表示線性布局)
         
      
      
        */
      
      
        public
      
       LayoutInformation(View view, 
      
        double
      
       viewWidth, 
      
        double
      
      
         viewHeight,
                        
      
      
        double
      
       viewMarginLeft, 
      
        double
      
       viewMarginTop, 
      
        int
      
      
         parentLayoutType)
        {

                
      
      
        this
      
      .view =
      
         view;
                
      
      
        this
      
      .viewWidth =
      
         viewWidth;
                
      
      
        this
      
      .viewHeight =
      
         viewHeight;
                
      
      
        this
      
      .viewMarginLeft =
      
         viewMarginLeft;
                
      
      
        this
      
      .viewMarginTop =
      
         viewMarginTop;
                
      
      
        this
      
      .parentLayoutType=
      
        parentLayoutType;
        }

        
      
      
        /**
      
      
        
         * 獲取View的對象
         * 
         * 
      
      
        @return
      
      
         View對象
         
      
      
        */
      
      
        public
      
      
         View getView()
        {
                
      
      
        return
      
      
         view;
        }

        
      
      
        /**
      
      
        
         * 設置View的對象
         
      
      
        */
      
      
        public
      
      
        void
      
      
         setView(View view)
        {
                
      
      
        this
      
      .view =
      
         view;
        }

        
      
      
        /**
      
      
        
         * 獲取View的寬度
         * 
         * 
      
      
        @return
      
      
         View的寬度,double型
         
      
      
        */
      
      
        public
      
      
        double
      
      
         getViewWidth()
        {
                
      
      
        return
      
      
         viewWidth;
        }

        
      
      
        /**
      
      
        
         * 設置View的寬度,double型
         * 
         * 
      
      
        @param
      
      
         viewWidth
         
      
      
        */
      
      
        public
      
      
        void
      
       setViewWidth(
      
        double
      
      
         viewWidth)
        {
                
      
      
        this
      
      .viewWidth =
      
         viewWidth;
        }

        
      
      
        /**
      
      
        
         * 獲取View的高度
         * 
         * 
      
      
        @return
      
      
         View的高度,double型
         
      
      
        */
      
      
        public
      
      
        double
      
      
         getViewHeight()
        {
                
      
      
        return
      
      
         viewHeight;
        }

        
      
      
        /**
      
      
        
         * 設置View的高度,double型
         * 
         * 
      
      
        @param
      
      
         viewHeight
         
      
      
        */
      
      
        public
      
      
        void
      
       setViewHeight(
      
        double
      
      
         viewHeight)
        {
                
      
      
        this
      
      .viewHeight =
      
         viewHeight;
        }

        
      
      
        /**
      
      
        
         * 獲取View距離左邊的距離
         * 
         * 
      
      
        @return
      
      
         View距離左邊的距離,double型
         
      
      
        */
      
      
        public
      
      
        double
      
      
         getViewMarginLeft()
        {
                
      
      
        return
      
      
         viewMarginLeft;
        }

        
      
      
        /**
      
      
        
         * 設置View距離左邊的距離,double型
         * 
         * 
      
      
        @param
      
      
         viewMarginLeft
         
      
      
        */
      
      
        public
      
      
        void
      
       setViewMarginLeft(
      
        double
      
      
         viewMarginLeft)
        {
                
      
      
        this
      
      .viewMarginLeft =
      
         viewMarginLeft;
        }

        
      
      
        /**
      
      
        
         * 獲取View距離上部的距離
         * 
         * 
      
      
        @return
      
      
         View距離上部的距離,double型
         
      
      
        */
      
      
        public
      
      
        double
      
      
         getViewMarginTop()
        {
                
      
      
        return
      
      
         viewMarginTop;
        }

        
      
      
        /**
      
      
        
         * 設置View距離上部的距離,double型
         * 
         * 
      
      
        @param
      
      
         viewMargdoubleop
         
      
      
        */
      
      
        public
      
      
        void
      
       setViewMarginTop(
      
        double
      
      
         viewMarginTop)
        {
                
      
      
        this
      
      .viewMarginTop =
      
         viewMarginTop;
        }
        
        
      
      
        /**
      
      
        
         * 獲取父類布局的類型
         * 
      
      
        @return
      
      
         parentLayoutType,int型
         
      
      
        */
      
      
        public
      
      
        int
      
      
         getParentLayoutType()
        {
                
      
      
        return
      
      
         parentLayoutType;
        }

        
      
      
        /**
      
      
        
         * 設置父類布局的類型
         * 
      
      
        @param
      
      
         parentLayoutType
         
      
      
        */
      
      
        public
      
      
        void
      
       setParentLayoutType(
      
        int
      
      
         parentLayoutType)
        {
                
      
      
        this
      
      .parentLayoutType =
      
         parentLayoutType;
        }

}
      
    

第二步:創建一個計算方法:

      
        import
      
      
         java.util.List;


      
      
        import
      
      
         android.app.Activity;

      
      
        import
      
      
         android.content.Context;

      
      
        import
      
      
         android.util.DisplayMetrics;

      
      
        import
      
      
         android.view.View;

      
      
        import
      
      
         android.view.ViewGroup.LayoutParams;

      
      
        import
      
      
         android.widget.LinearLayout;

      
      
        import
      
      
         android.widget.RelativeLayout;


      
      
        /**
      
      
        
 * 分配率通配類
 * 
 * 
      
      
        @author
      
      
         
 * 
 
      
      
        */
      
      
        public
      
      
        class
      
      
         MyLayoutAdapter
{
        
      
      
        /**
      
      
        
         * 基準分辨率的寬
         
      
      
        */
      
      
        public
      
      
        double
      
      
         STANDARD_SCREEN_WIDTH;

        
      
      
        /**
      
      
        
         * 基準分辨率的高
         
      
      
        */
      
      
        public
      
      
        double
      
      
         STANDARD_SCREEN_HEIGHT;

        
      
      
        /**
      
      
        
         * 系統當前的分辨率的寬
         
      
      
        */
      
      
        public
      
      
        double
      
      
         CURRENT_SCREEN_WIDTH;

        
      
      
        /**
      
      
        
         * 系統當前的分辨率的高
         
      
      
        */
      
      
        public
      
      
        double
      
      
         CURRENT_SCREEN_HEIGHT;

        
      
      
        /**
      
      
        
         * 基準屏幕密度
         
      
      
        */
      
      
        public
      
      
        static
      
      
        final
      
      
        double
      
       STANDARD_DENSITY = 160
      
        ;

        
      
      
        /**
      
      
        
         * 當前屏幕密度
         
      
      
        */
      
      
        private
      
      
        double
      
      
         CURRENT_DENSITY;

        
      
      
        /**
      
      
        
         * 屏幕密度比例
         
      
      
        */
      
      
        private
      
      
        double
      
      
         DENSITY_RATIO;

        
      
      
        /**
      
      
        
         * 屏幕寬度比例
         
      
      
        */
      
      
        private
      
      
        double
      
      
         WIDTH_RATIO;

        
      
      
        /**
      
      
        
         * 屏幕高度比例
         
      
      
        */
      
      
        private
      
      
        double
      
      
         HEIGHT_RATIO;

        
      
      
        /**
      
      
        
         * 組件基準的寬度
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewStandardWidth;

        
      
      
        /**
      
      
        
         * 組件基準的高度
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewStandardHeight;

        
      
      
        /**
      
      
        
         * 組件基準的距離左邊的距離
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewStandardMarginLeft;

        
      
      
        /**
      
      
        
         * 組件基準的距離頂部的距離
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewStandardMarginTop;

        
      
      
        /**
      
      
        
         * 組件當前的寬
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewCurrentWidth;

        
      
      
        /**
      
      
        
         * 組件當前的高
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewCurrentHeight;

        
      
      
        /**
      
      
        
         * 組件當前距離左邊的距離
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewCurrentMarginLeft;

        
      
      
        /**
      
      
        
         * 組件當前距離頂部的距離
         
      
      
        */
      
      
        private
      
      
        double
      
      
         viewCurrentMarginTop;

        
      
      
        /**
      
      
        
         * UI組件的對象
         
      
      
        */
      
      
        private
      
      
         View view;

        
      
      
        /**
      
      
        
         * 此View的父類布局的類型
         
      
      
        */
      
      
        private
      
      
        int
      
      
         parentLayoutType;

        
      
      
        /**
      
      
        
         * 父類布局的類型為相對布局
         
      
      
        */
      
      
        private
      
      
        final
      
      
        int
      
       LAYOUT_TYPE_RELATiVELAYOUT =
      
         LayoutInformation.R;

        
      
      
        /**
      
      
        
         * 父類布局的類型為線性布局
         
      
      
        */
      
      
        private
      
      
        final
      
      
        int
      
       LAYOUT_TYPE_LINEARLAYOUT =
      
         LayoutInformation.L;

        
      
      
        /**
      
      
        
         * 布局屬性為wrap_content
         
      
      
        */
      
      
        private
      
      
        final
      
      
        int
      
       LAYOUTPARAMS_WARP_CONTENT =
      
         LayoutParams.WRAP_CONTENT;

        
      
      
        /**
      
      
        
         * 布局屬性為fill_parent
         
      
      
        */
      
      
        private
      
      
        final
      
      
        int
      
       LAYOUTPARAMS_FILL_PARENT =
      
         LayoutParams.FILL_PARENT;

        
      
      
        private
      
      
         Context context;

        
      
      
        /**
      
      
        
         * 類對象實例化時,設置 基準屏幕寬度,高度
         * 
         * 
      
      
        @param
      
      
         context
         *            Context
         * 
      
      
        @param
      
      
         standardWidth
         *            基準屏幕的寬
         * 
      
      
        @param
      
      
         standardHeight
         *            基準屏幕的高
         
      
      
        */
      
      
        public
      
       MyLayoutAdapter(Context context, 
      
        double
      
      
         standardWidth,
                        
      
      
        double
      
      
         standardHeight)
        {
                
      
      
        this
      
      .context =
      
         context;
                getScreenSize();
                STANDARD_SCREEN_HEIGHT 
      
      =
      
         standardHeight;
                STANDARD_SCREEN_WIDTH 
      
      =
      
         standardWidth;
                
      
      
        //
      
      
         計算寬高比率
      
      
                WIDTH_RATIO = CURRENT_SCREEN_WIDTH /
      
         STANDARD_SCREEN_WIDTH;
                HEIGHT_RATIO 
      
      = CURRENT_SCREEN_HEIGHT /
      
         STANDARD_SCREEN_HEIGHT;
        }

        
      
      
        /**
      
      
        
         * 獲取當前屏幕大小和密度
         
      
      
        */
      
      
        private
      
      
        void
      
      
         getScreenSize()
        {
                DisplayMetrics displayMetrics 
      
      = 
      
        new
      
      
         DisplayMetrics();
                ((Activity) context).getWindowManager().getDefaultDisplay()
                                .getMetrics(displayMetrics);
                CURRENT_SCREEN_WIDTH 
      
      =
      
         displayMetrics.widthPixels;
                CURRENT_SCREEN_HEIGHT 
      
      =
      
         displayMetrics.heightPixels;
                CURRENT_DENSITY 
      
      =
      
         displayMetrics.densityDpi;
                DENSITY_RATIO 
      
      = STANDARD_DENSITY /
      
         CURRENT_DENSITY;
        }

        
      
      
        /**
      
      
        
         * 進行通配
         * 
         * 
      
      
        @param
      
      
         listdata
         
      
      
        */
      
      
        public
      
      
        void
      
       setViewLayout(List<LayoutInformation>
      
         listdata)
        {

                
      
      
        for
      
       (
      
        int
      
       i = 0; i < listdata.size(); i++
      
        )
                {

                        view 
      
      =
      
         listdata.get(i).getView();
                        viewStandardWidth 
      
      =
      
         listdata.get(i).getViewWidth();
                        viewStandardHeight 
      
      =
      
         listdata.get(i).getViewHeight();
                        viewStandardMarginLeft 
      
      =
      
         listdata.get(i).getViewMarginLeft();
                        viewStandardMarginTop 
      
      =
      
         listdata.get(i).getViewMarginTop();

                        setLayoutParams();
                        viewCurrentMarginLeft 
      
      = viewStandardMarginLeft *
      
         WIDTH_RATIO;
                        viewCurrentMarginTop 
      
      = viewStandardMarginTop *
      
         HEIGHT_RATIO;
                        parentLayoutType 
      
      =
      
         listdata.get(i).getParentLayoutType();
                        setLayoutByParentLayoutType();
                }
        }

        
      
      
        /**
      
      
        
         * 判斷布局屬性的值,設置布局的屬性
         
      
      
        */
      
      
        private
      
      
        void
      
      
         setLayoutParams()
        {
                
      
      
        //
      
      
         如果基準的寬是wrap_content或者fill_parent則使用原值,否則進行計算得到通配后的值
      
      
        if
      
       (viewStandardWidth ==
      
         LAYOUTPARAMS_WARP_CONTENT
                                
      
      || viewStandardWidth ==
      
         LAYOUTPARAMS_FILL_PARENT)
                {
                        viewCurrentWidth 
      
      =
      
         viewStandardWidth;
                } 
      
      
        else
      
      
        
                {
                        viewCurrentWidth 
      
      = viewStandardWidth *
      
         WIDTH_RATIO;
                }

                
      
      
        //
      
      
         如果基準的寬是wrap_content或者fill_parent則使用原值,否則進行計算得到通配后的值
      
      
        if
      
       (viewStandardHeight ==
      
         LAYOUTPARAMS_WARP_CONTENT
                                
      
      || viewStandardHeight ==
      
         LAYOUTPARAMS_FILL_PARENT)
                {
                        viewCurrentHeight 
      
      =
      
         viewStandardHeight;
                } 
      
      
        else
      
      
        
                {
                        viewCurrentHeight 
      
      = viewStandardHeight *
      
         HEIGHT_RATIO;
                }
        }

        
      
      
        /**
      
      
        
         * 通過判斷此View父類的布局類型,給此View設置布局
         
      
      
        */
      
      
        private
      
      
        void
      
      
         setLayoutByParentLayoutType()
        {

                
      
      
        if
      
       (parentLayoutType ==
      
         LAYOUT_TYPE_RELATiVELAYOUT)
                {

                        RelativeLayout.LayoutParams params 
      
      = 
      
        new
      
      
         RelativeLayout.LayoutParams(
                                        (
      
      
        int
      
      ) viewCurrentWidth, (
      
        int
      
      
        ) viewCurrentHeight);

                        params.setMargins((
      
      
        int
      
      
        ) viewCurrentMarginLeft,
                                        (
      
      
        int
      
      ) viewCurrentMarginTop, 0, 0
      
        );

                        view.setLayoutParams(params);

                } 
      
      
        else
      
      
        if
      
       (parentLayoutType ==
      
         LAYOUT_TYPE_LINEARLAYOUT)
                {

                        LinearLayout.LayoutParams params 
      
      = 
      
        new
      
      
         LinearLayout.LayoutParams(
                                        (
      
      
        int
      
      ) viewCurrentWidth, (
      
        int
      
      
        ) viewCurrentHeight);
                        params.setMargins((
      
      
        int
      
      
        ) viewCurrentMarginLeft,
                                        (
      
      
        int
      
      ) viewCurrentMarginTop, 0, 0
      
        );
                        view.setLayoutParams(params);
                }
        }

        
      
      
        /**
      
      
        
         * 設置字體大小
         * 
         * 
      
      
        @param
      
      
         standardSize
         *            原始大小
         * 
      
      
        @return
      
      
         int
         
      
      
        */
      
      
        public
      
      
        int
      
       setTextSize(
      
        int
      
      
         standardSize)
        {
                
      
      
        int
      
      
         currentSize;
                currentSize 
      
      = (
      
        int
      
      ) (standardSize * WIDTH_RATIO *
      
         DENSITY_RATIO);

                
      
      
        return
      
      
         currentSize;
        }
}
      
    

第三步,寫一個接口:

      
        public
      
      
        interface
      
      
         InitAllView{
        
      
      
        /**
      
      
        
         * 初始化控件的大小
         
      
      
        */
      
      
        public
      
      
        void
      
      
         initAllView();

}
      
    

第四步:代碼控制:

      
        /**
      
      
        
         * 通配方法
         
      
      
        */
      
      
        private
      
      
        void
      
      
         initWildcard() {
                myLayout 
      
      = 
      
        new
      
       MyLayoutAdapter(
      
        this
      
      , 320, 480
      
        );
                listInfo 
      
      = 
      
        new
      
       ArrayList<LayoutInformation>
      
        ();
                listInfo.add(
      
      
        new
      
      
         LayoutInformation(mBtn1, LayoutParams.WRAP_CONTENT,
                                LayoutParams.WRAP_CONTENT, 
      
      0, 0
      
        , LayoutInformation.R));
                listInfo.add(
      
      
        new
      
       LayoutInformation(mNowRegisterBtn, 80, 27.3, 14.7, 0
      
        ,
                                LayoutInformation.R));
                listInfo.add(
      
      
        new
      
       LayoutInformation(mNextRegisterBtn, 80, 27.3, 14.7, 0
      
        ,
                                LayoutInformation.R));

                
      
      
        //
      
      
         listInfo.add(new LayoutInformation(mCheckBtn, 17.3,17.3, 14.7, 0,
                
      
      
        //
      
      
         LayoutInformation.L));
      
      
                mBtn1.setTextSize(myLayout.setTextSize(12
      
        ));
                mNowRegisterBtn.setTextSize(myLayout.setTextSize(
      
      12
      
        ));
                mNextRegisterBtn.setTextSize(myLayout.setTextSize(
      
      12
      
        ));
                myLayout.setViewLayout(listInfo);
        }
      
    

效果對比如下:
小的圖片是通過適應過的,大的圖片是沒有做適配的。可以看得出來他們的差異很明顯。如果各位大嬸有什么新的方法,希望多多推薦

效果對比

android 分辨率適配的方法

android 分辨率適配的方法


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 12345国产精品高清在线 | 久久精品店 | 波多野结衣国产一区二区三区 | 日本一区二区三区免费高清在线 | 日本亚洲欧美美色 | 久久中文娱乐网 | 亚洲专区在线视频 | 好吊妞在线成人免费 | www.欧美日本免费视频 | 中文字幕 一区 婷婷 在线 | 97se亚洲综合在线天天 | 日本一区视频在线 | 午夜久久久| 国产精品伦视频观看免费 | 国产小视频免费在线观看 | 5x性区m免费毛片视频看看 | 老妇激情毛片免费中国 | 99久久精品费精品国产 | 国模极品一区二区三区 | 日韩欧美在线看 | 亚洲日本中文字幕在线2022 | 欧美18—19sex性护士 | 99免费观看 | 欧美一级久久久久久久大 | 日韩 欧美 亚洲 国产 | 尤物精品视频在线观看 | 99国产精品欧美久久久久久影院 | 久草这里只有精品 | 欧美性禁片在线观看 | 九九国产视频 | 波多野结衣中文字幕一区二区 | 国产精品免费视频播放 | 国产免费专区 | 福利视频免费观看 | 日日爱夜夜操 | 91视频一区 | 久色阁| 午夜精品久久久久久久2023 | 色综和| 97视频在线视频 | 男人的影院 |