Đổi đơn vị trong android

Chào mn, mình mới tìm hiểu về android được một thời gian có 1 số thắc mắc mong được mọi người giải đáp giúp.
Đầu tiên là việc đổi đơn vị, mình lấy bản design từ designer (XD), thường thì design sẽ sử dụng đơn vị px vậy làm thế nào để mình có thể cắt giao diện đúng từ px -> dp được.
Câu thứ 2 mình muốn hỏi là đoạn code dưới đây mình dùng để tạo ImageView ảnh cho ImageSwitcher mình có 2 phần chưa hiểu là tại sao khi set LayoutParam thì lại truyền vào ActionBar.LayoutParam mà k phải các layout khác, tiếp theo là khi mình set như thế kia thì sẽ gặp trường hợp nếu như vùng chưa ImageSwitcher thay đổi thì kích cỡ ảnh cũng thay đổi theo(nhỏ hoặc to dần) mình muốn nó hiện đúng kích thước ảnh thì phải làm thế nào.

this.imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(getApplicationContext());
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                ImageSwitcher.LayoutParams params= new ImageSwitcher.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
                imageView.setLayoutParams(params);
                return imageView;
            }
        });

Đó là tất cả những thắc mắc của mình, mong được mọi người giải đáp, mình cảm ơn nhiều !

Với câu số 1, màn hình các máy android rất đa dạng tuy nhiên thường có size chiều rộng là 360px hoặc 411px đối với bên lập trình web. Thường thì màn cỡ 360px sẽ phổ biến hơn do đó để đổi đơn vị bạn cứ lấy width của ảnh design gửi bạn chia cho 360 để xem 1dp tương ứng bao nhiêu px trong bản design. Tuy nhiên bạn đừng quá máy móc vào 1 con số cụ thể vì màn hình điện thoại rất đa dạng, chỉ cần nhìn hợp lí tương đồng với bản design gửi là ok rồi
Với câu 2, thật ra thì với các giá trị LayoutParams đó bạn có thể dùng bất kì của layout nào không nhất thiết là ActionBar.LayoutParams. Bạn dùng luôn ImageSwitcher.LayoutParams cũng ok. Theo mình đoán lí do người viết dòng code trên dùng là do lười nên copy code từ chỗ nào đó nhưng không thèm sửa lại dẫn đến 1 đoạn code nửa nạc nửa mỡ như bạn thắc mắc

5 Likes

cảm ơn bạn rất nhiều, còn 1 câu nữa mình muốn hỏi bạn là làm thế nào để ảnh hiển thị đúng width và height của nó ví dụ hình dưới đây, nó bị sẽ co giãn theo height của thằng ImageSwithcer cha, hiện tại mình muốn nó hiển thị đúng width va heigjt của nó dù thằng ImageSwitcher có thay đổi height.

2 Likes

ImageSwitcher dùng 1 ImageView để hiển thị hình, lấy được ImageView này thì bạn có thể chỉnh thông qua phương thức setScaleType() để nó hiển thị theo ý của bạn.
Theo hình thì đang ở chế độ: ImageView.ScaleType.CENTER_INSIDE.

Hoặc tùy biến từ lớp cha của ImageSwitcher: ViewSwicher thích thêm cuộn ngang, cuộn dọc, chỉnh kích thước gì gì đó thì tùy.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?