Days29 自定义View(二) & 语言的国际化 & 屏幕适配

本文介绍了一种在Android应用中实现屏幕适配的方法。通过获取屏幕尺寸并动态调整布局参数,确保不同尺寸设备上的UI元素能够正确显示。文章详细展示了如何使用WindowManager获取屏幕尺寸,并利用LinearLayout.LayoutParams设置TextView的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3、屏幕适配
根据屏幕的尺寸设置控件的大小

public class MainActivity extends AppCompatActivity {

    private TextView txt1, txt2, txt3, txt4;
    private int screenWidth, screenHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        //  窗体管理对象
        /**
         *   整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。
         *   WindowManager是全局的
         *   它面向的对象一端是屏幕,另一端就是View
         */
        WindowManager windowManager = getWindowManager();

        //  构建DisplayMetrics对象
        //DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体
        /**
         * 注:构造函数DisplayMetrics 不需要传递任何参数;调用getWindowManager() 之后,会取得现有Activity 的Handle ,
         * 此时,getDefaultDisplay() 方法将取得的宽高维度存放于DisplayMetrics 对象中,而取得的宽高维度是以像素为单位(Pixel) ,
         * “像素”所指的是“绝对像素”而非“相对像素”。
         */
        DisplayMetrics displayMetrics = new DisplayMetrics();

        windowManager.getDefaultDisplay().getMetrics(displayMetrics);

        //  获取当前设备的宽度和高度
        screenWidth = displayMetrics.widthPixels;
        screenHeight = displayMetrics.heightPixels;

        Log.d("test", screenHeight + "screenHeight");

        /**
         * LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。
         * LayoutParams类也只是简单的描述了宽高,宽和高都可以设置成三种值:
         1,一个确定的值;
         2,FILL_PARENT,即填满(和父容器一样大小);
         3,WRAP_CONTENT,即包裹住组件就好
         * 假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉Layout用户期望的布局方式,
         * 也就是将一个认可的layoutParams传递进去
         */
        LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (screenHeight * 0.1 + 0.5));
        layoutParams1.topMargin = 3;
        txt1.setLayoutParams(layoutParams1);

        LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (screenHeight * 0.2 + 0.5));
        layoutParams2.topMargin = 3;
        txt2.setLayoutParams(layoutParams2);

        LinearLayout.LayoutParams layoutParams3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (screenHeight * 0.3 + 0.5));
        layoutParams3.topMargin = 3;
        txt3.setLayoutParams(layoutParams3);

        LinearLayout.LayoutParams layoutParams4 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (screenHeight * 0.4 + 0.5));
        layoutParams4.topMargin = 3;
        txt4.setLayoutParams(layoutParams4);

//        LinearLayout.LayoutParams layoutParams4 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
//        layoutParams4.topMargin = 3;
//        txt4.setLayoutParams(layoutParams4);
    }

    private void initView() {
        txt1 = (TextView) findViewById(R.id.txt1);
        txt2 = (TextView) findViewById(R.id.txt2);
        txt3 = (TextView) findViewById(R.id.txt3);
        txt4 = (TextView) findViewById(R.id.txt4);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值