android布局适配

来源:互联网 发布:mysql5.7数据库下载 编辑:程序博客网 时间:2024/06/03 04:29
对于屏幕的适配解决方案:
    对于比较灵活的布局:其他按钮的布局是根据按钮的布局进行显示的!
    该布局不能以简单的横向或者竖向的比例关系进行计算出!
    解决方案1:
        需要切不同屏幕分辨率一些背景图片!
        需要建立不同分辨率的values文件夹,里面对应的值不一样!

    解决方案2:

        建立其中的布局中的view对象的显示位置的关系式:进行计算!



例子:

      


如上图所示:

       如何在布局中进行设置四个按钮的位置!


      初始想法:

           使用相对布局:将"文明监督"的按钮进行相对布局中"center_horizontal"----"横向居中显示",设置对象的半径长度"dp"值,"文明评论","文明动态","我的"--这几个模块进行设置对应的marginTop,marginLeft,marginRight值,以及半径设置成一个固定的dp值。


      出现的问题:

        在不同屏幕分辨率的手机上会导致四个按钮的位置或错乱!固定的半径的dp值并不能解决布局错乱的问题!


    解决方案:

       1:一个布局文件,但是对应的Values文件夹有不同分辨率的文件夹:

               如下图:

          不同values文件夹下的dimen文件:同一个字段名称--对应的值会不一样!

   

     2:其实四个按钮:“文明监督”按钮是固定的位置:水平居中------其他三个按钮与文明监督按钮成一定的角度关系,半径成一定的比例关系,可以进行利用数学的几何关系:列出横向和竖向的关系式:

       角度图如下:

http://img.blog.csdn.net/20161024190219990?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

         关系变量:

            

      final float comment_jiaodu=(float)((35.0/180.0)*Math.PI);      final float state_jiaodu=(float)((16.0/180.0)*Math.PI);      final float mine_jiaodu=(float)((20.0/180.0)*Math.PI);      //文明评论,文明动态,我的与"文明监督"之间的半径比例关系      float comment_radius_rate=0.8f;//文明评论半径与文明监督半径关系比例      float comment_radius_rate_left=0.9f;//文明评论半径与文明监督半径交叉比例      float state_radius_rate=0.95f;//文明动态半径与文明监督半径关系比例      float state_radius_rate_left=0.9f;//文明动态半径与文明监督半径交叉比例      float mine_radius_rate=0.6f;//我的半径与文明监督半径关系比例      float mine_radius_rate_left=0.9f;//我的半径与文明监督半径交叉比例     //横向和属性空白之间的比例     float rate_x_1=0.06f,rate_x_2=0.06f,//           rate_y_1=0.25f,rate_y_2=0.15f;     float rate_supervise_radius=0.1f;//文明监督背景的比例/实际半径     float rate_supervise_background_width_height_1=0.9533f;      <pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:9.0pt;">
               //进行横向和竖向的条件:获取min(r1,r2)                float r1=(float)((scressWidth*(1-rate_x_1-rate_x_2))/                                     (((1+rate_supervise_radius+comment_radius_rate*comment_radius_rate_left)*Math.cos(comment_jiaodu))+//                                                            (1+rate_supervise_radius+mine_radius_rate*mine_radius_rate_left)*Math.cos(mine_jiaodu)+//                                                                                                                            mine_radius_rate+comment_radius_rate));                float r2=(float)(((main_rl_height*(1-rate_y_2))/(1+//                                                                (1+rate_supervise_radius+state_radius_rate*state_radius_rate_left)*Math.cos(state_jiaodu)+//                                                                                                                                    state_radius_rate+rate_y_1)));                System.out.println("radius_supervise r1:"+r1+"..r2:"+r2);                //进行获取最小的半径                radius_supervise=Math.min(r1,r2);                System.out.println("radius_supervise:"+radius_supervise+"..comment_jiaodu:"+comment_jiaodu+"..state_jiaodu:"+state_jiaodu+"..mine_jiaodu:"+mine_jiaodu);                radius_supervise_out=radius_supervise+radius_supervise*rate_supervise_radius;                //进行设置各自的宽度和margin值                //文明监督                rl_supervise_background.getLayoutParams().width=//                                                             (int)(radius_supervise*(rate_supervise_radius+1))*2;                rl_supervise_background.getLayoutParams().height=//                                                             (int)(rl_supervise_background.getLayoutParams().width/rate_supervise_background_width_height_1);//                rl_supervise_background.getLayoutParams().width=(int)radius_supervise_out;                rl_supervise_background.requestLayout();                rl_civilization_supervise.getLayoutParams().height=(int)radius_supervise*2;                rl_civilization_supervise.getLayoutParams().width=(int)radius_supervise*2;                ((ViewGroup.MarginLayoutParams)rl_civilization_supervise.getLayoutParams()).topMargin=(int)((rate_y_1)*radius_supervise);                rl_civilization_supervise.requestLayout();                //设置btnSupervise的padding值                btnSupervise.setPadding(btnSupervise.getPaddingLeft(),(int)(radius_supervise*0.7),btnSupervise.getPaddingRight(),btnSupervise.getPaddingBottom());                                //文明评论                rl_comment.getLayoutParams().height=(int)(comment_radius_rate*radius_supervise)*2;                rl_comment.getLayoutParams().width=(int)(comment_radius_rate*radius_supervise)*2;                ((ViewGroup.MarginLayoutParams)rl_comment.getLayoutParams()).topMargin=//                                                             (int)(radius_supervise+rate_y_1*radius_supervise+//                                                                             Math.sin(comment_jiaodu)*(1+comment_radius_rate*comment_radius_rate_left+rate_supervise_radius)*radius_supervise-//                                                                                                                                                        comment_radius_rate*radius_supervise);                ((ViewGroup.MarginLayoutParams)rl_comment.getLayoutParams()).leftMargin=//                                                            (int)(scressWidth*0.5-(Math.cos(comment_jiaodu)*(1+comment_radius_rate*comment_radius_rate_left+rate_supervise_radius)*radius_supervise)- comment_radius_rate*radius_supervise);                System.out.println("radius_supervise rl_comment.getLayoutParams()).leftMargin:" + ((ViewGroup.MarginLayoutParams) rl_comment.getLayoutParams()).leftMargin + "...");//- comment_radius_rate*radius_supervise                rl_comment.requestLayout();                //我的模块                rl_mine.getLayoutParams().height=(int)(mine_radius_rate*radius_supervise)*2;                rl_mine.getLayoutParams().width=(int)(mine_radius_rate*radius_supervise)*2;                ((ViewGroup.MarginLayoutParams)rl_mine.getLayoutParams()).topMargin=                                                            (int)(radius_supervise+rate_y_1*radius_supervise+(1+mine_radius_rate*mine_radius_rate_left+rate_supervise_radius)*radius_supervise*Math.sin(mine_jiaodu)-//                                                                                                                                                        mine_radius_rate*radius_supervise);                ((ViewGroup.MarginLayoutParams)rl_mine.getLayoutParams()).rightMargin=//                                                            (int)(scressWidth*0.5-Math.cos(mine_jiaodu)*(1+rate_supervise_radius+mine_radius_rate*mine_radius_rate_left)*radius_supervise-//                                                                                                                                                        mine_radius_rate*radius_supervise);                rl_mine.requestLayout();                //文明动态                rl_civi_state.getLayoutParams().height=(int)(state_radius_rate*radius_supervise)*2;                rl_civi_state.getLayoutParams().width=(int)(state_radius_rate*radius_supervise)*2;                ((ViewGroup.MarginLayoutParams)rl_civi_state.getLayoutParams()).topMargin=//                                                            (int)((Math.cos(state_jiaodu)*(1+state_radius_rate*state_radius_rate_left+rate_supervise_radius))*radius_supervise-radius_supervise+                                                                                                                        radius_supervise+rate_y_1*radius_supervise);                ((ViewGroup.MarginLayoutParams)rl_civi_state.getLayoutParams()).leftMargin=//                                                            (int)(0.5*scressWidth-(radius_supervise*state_radius_rate-//                                                                                                                        Math.sin(state_jiaodu)*(1+state_radius_rate*state_radius_rate_left+rate_supervise_radius)*radius_supervise));                rl_civi_state.requestLayout();





0 0