Android屏幕自适应解决办法

来源:互联网 发布:华测手簿同步软件 编辑:程序博客网 时间:2024/04/30 06:41
安卓的xml布局实在难做屏幕自适应,虽然可以使用多个配置文件,但对于适配要求高的应用,依然力不从心。
这里提供一种解决办法。主要是通过以下方法实现:
        RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(iw, ih);
        param.setMargins(x, y, 0, 0);
所有组件都加在RelativeLayout上面,通过setMargins设置坐标和LayoutParams构造函数传入大小。

       坐标和大小相对屏幕缩放。

Factory.java

import com.dangbei.util.Axis;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.RelativeLayout;public class Factory {public static RelativeLayout.LayoutParams createRelativeLayoutParams(int x, int y, int w, int h) {int ix = Axis.scaleX(x);int iy = Axis.scaleY(y);int iw = w == -1 ? LayoutParams.WRAP_CONTENT : w == -2 ? LayoutParams.MATCH_PARENT : Axis.scaleX(w);int ih = h == -1 ? LayoutParams.WRAP_CONTENT : h == -2 ? LayoutParams.MATCH_PARENT : Axis.scaleY(h);RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(iw, ih);param.setMargins(ix, iy, 0, 0);return param;}}//Axis.javaimport android.util.DisplayMetrics;public class Axis {    private Activity activity;    public Axis(Activity activity) {        this.activity = activity;    public static int scaleX(int x) {        DisplayMetrics metrics = new DisplayMetrics();        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);        return (int)(x * metrics.widthPixels / 320);    }        public static int scaleY(int y) {        DisplayMetrics metrics = new DisplayMetrics();        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);        return (int)(y * metrics.heightPixels / 480);    }}

用法:

TextView tv = new TextView(context);     tv.setText("sample");     RelativeLayout rl = new RelativeLayout(context);     rl.addView(tv, Factory.createRelativeLayoutParams(10, 10, 100, 60));


详细讲解,请看我的书
0 0
原创粉丝点击