当前位置:   article > 正文

android 页面自适应布局实践_layout_margintop能自适应吗

layout_margintop能自适应吗

Relativelayout 布局

一. 如果要实现诸如 2条线 宽度相同 并且上面字的在2条线中间 如图
自适应图片样例
1. 实现过程 先实现2条不同颜色的线长度相同并居中显示

布局文件如下:

<View
    android:layout_width="110dp"
    android:layout_height="1dp"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="50dp"
    android:background="@color/top_bar_normal_bg"
    android:layout_below="@+id/editText"
    android:id="@+id/line1" />
<View
    android:id="@+id/line2"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginTop="5dp"
    android:background="@android:color/white"
    android:layout_toRightOf="@+id/line1"
    android:layout_below="@+id/editText"
    android:layout_marginRight="50dp"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这样能够基本实现2个line 右边对齐 ,但是如果要做到完全居中,则要用 java 获取设备的宽度 然后在计算长度并更新line的长度了

2.获取android 的当前宽高,然后计算出每条线的长度这样就能做到自适应了。
android 代码如下:

public class Displaymetrics {
    private static Displaymetrics instance = null;
    public  static Displaymetrics getInstance() {
        if (instance == null) {
            instance    = new Displaymetrics();
        }

        return instance;
    }
    //获取运行屏幕宽度
    public int getScreenWidth(WindowManager windowManager){
        DisplayMetrics dm = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(dm);
        //宽度 dm.widthPixels
        //高度 dm.heightPixels
        Log.d("widthPixels", String.valueOf(dm.widthPixels));
        return  dm.widthPixels;
    }
    //DP转PX
    public static int dp2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    //PX转DP
    private static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

我这里写了个获取当前设备宽高的单例类,然后接下来就是算出line1的长度了

 Displaymetrics displaymetrics = Displaymetrics.getInstance();
        line1.getLayoutParams().width = displaymetrics.getScreenWidth(getWindowManager())/2-displaymetrics.dp2px(this,50);
  • 1
  • 2

到这一步 就能实现line1 跟line2 居中并长度相同,接下来 就要开始将上面的字居中并对齐了
3.完成上面的字的对齐

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/editText"
            android:layout_marginTop="99dp"
            android:textColor="@color/top_bar_normal_bg"
            android:textSize="@dimen/login_tab_fontsize"
            android:text="普通登录"
            android:layout_marginLeft="50dp"
            android:layout_alignRight="@+id/line1"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editTex2"
            android:textColor="@android:color/white"
            android:textSize="@dimen/login_tab_fontsize"
            android:text="手机验证码登录"
            android:onClick="changePhoneLogin"
            android:layout_marginTop="99dp"
            android:layout_marginRight="50dp"
            android:layout_alignLeft="@+id/line2"
            android:gravity="center"
            android:layout_alignParentRight="true"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

具体就是设为match_parent然后设为center 然后text1的android:layout_alignRight设为line1,text2的android:layout_alignLeft 设为line2,这样就完成了相对复杂页面的自适应布局。

如有不理解的地方我们可以互相交流 qq 1064480036@qq.com

热爱生活,热爱编程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/283407
推荐阅读
相关标签
  

闽ICP备14008679号