ปรับภาพให้พอดีกับ ImageView รักษาอัตราส่วนภาพแล้วปรับขนาด ImageView ให้เป็นขนาดภาพหรือไม่


164

วิธีเพื่อให้พอดีกับขนาดของภาพสุ่มไปยังImageView?
เมื่อไหร่:

  • ImageViewขนาดเริ่มต้นคือ 250dp * 250dp
  • ขนาดที่ใหญ่ขึ้นของภาพควรถูกปรับขึ้น / ลงเป็น 250dp
  • ภาพควรรักษาอัตราส่วนภาพ
  • ImageViewขนาดควรจะตรงกับขนาดภาพปรับหลังปรับ

เช่นสำหรับภาพ 100 * 150 ภาพและImageViewควรเป็น 166 * 250
เช่นสำหรับภาพ 150 * 100 ภาพและImageViewควรเป็น 250 * 166

ถ้าฉันตั้งค่าขอบเขตเป็น

<ImageView
    android:id="@+id/picture"
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:adjustViewBounds="true" />

รูปภาพพอดีในImageView, แต่ImageViewจะเป็น 250dp * 250dp เสมอ


เอ่อคุณหมายถึงการเปลี่ยนขนาดของImageViewภาพเป็นขนาดหรือไม่? เช่นภาพที่มีขนาด 100dp x 150dp จะขยายImageViewเป็นมาตรการเดียวกันหรือไม่ หรือคุณหมายถึงวิธีการปรับขนาดภาพเป็นImageViewขอบเขต เช่นภาพขนาด 1000dp x 875dp จะถูกปรับอัตราส่วนเป็น 250dp x 250dp คุณต้องการรักษาอัตราส่วนภาพหรือไม่?
Jarno Argillander

ฉันต้องการให้ ImageView มีขนาดของภาพและภาพมีขนาดที่ใหญ่ที่สุดเท่ากับ 250dp และเพื่อรักษาอัตราส่วนไว้ เช่นสำหรับภาพขนาด 100 * 150 ฉันต้องการภาพและ ImageView ให้เป็น 166 * 250 ฉันจะอัปเดตคำถามของฉัน
กรกฎาคม

คุณต้องการปรับ / ปรับเฉพาะเมื่อแสดงกิจกรรม (ทำครั้งเดียว) หรือเมื่อทำบางสิ่งบางอย่างในกิจกรรมเช่นการเลือกภาพจากแกลเลอรี่ / เว็บ (ทำหลายครั้ง แต่ไม่โหลด) หรือทั้งสองอย่าง?
Jarno Argillander

ดูคำตอบที่แก้ไขแล้วของฉันซึ่งควรทำอย่างที่คุณต้องการ :)
Jarno Argillander

คำตอบ:


137

(คำตอบได้รับการแก้ไขอย่างมากหลังจากการชี้แจงคำถามเดิม)

หลังจากการชี้แจง:
นี้ไม่สามารถทำได้ใน XML เท่านั้น ไม่สามารถปรับขนาดทั้งภาพและImageViewเพื่อให้หนึ่งมิติของภาพจะเป็น 250dp เสมอและImageViewจะมีมิติเดียวกับภาพ

รหัสนี้ปรับขนาด Drawableของ a ImageViewให้อยู่ในรูปสี่เหลี่ยมจัตุรัสเช่น 250dp x 250dp โดยมีหนึ่งมิติที่แน่นอนที่ 250dp และรักษาอัตราส่วนกว้างยาว จากนั้นImageViewขนาดจะถูกปรับขนาดให้ตรงกับขนาดของภาพที่ปรับขนาด รหัสนี้ใช้ในกิจกรรม ฉันทดสอบมันผ่านปุ่มคลิกตัวจัดการ

สนุก. :)

private void scaleImage(ImageView view) throws NoSuchElementException  {
    // Get bitmap from the the ImageView.
    Bitmap bitmap = null;

    try {
        Drawable drawing = view.getDrawable();
        bitmap = ((BitmapDrawable) drawing).getBitmap();
    } catch (NullPointerException e) {
        throw new NoSuchElementException("No drawable on given view");
    } catch (ClassCastException e) {
        // Check bitmap is Ion drawable
        bitmap = Ion.with(view).getBitmap();
    }

    // Get current dimensions AND the desired bounding box
    int width = 0;

    try {
        width = bitmap.getWidth();
    } catch (NullPointerException e) {
        throw new NoSuchElementException("Can't find bitmap on given view/drawable");
    }

    int height = bitmap.getHeight();
    int bounding = dpToPx(250);
    Log.i("Test", "original width = " + Integer.toString(width));
    Log.i("Test", "original height = " + Integer.toString(height));
    Log.i("Test", "bounding = " + Integer.toString(bounding));

    // Determine how much to scale: the dimension requiring less scaling is
    // closer to the its side. This way the image always stays inside your
    // bounding box AND either x/y axis touches it.  
    float xScale = ((float) bounding) / width;
    float yScale = ((float) bounding) / height;
    float scale = (xScale <= yScale) ? xScale : yScale;
    Log.i("Test", "xScale = " + Float.toString(xScale));
    Log.i("Test", "yScale = " + Float.toString(yScale));
    Log.i("Test", "scale = " + Float.toString(scale));

    // Create a matrix for the scaling and add the scaling data
    Matrix matrix = new Matrix();
    matrix.postScale(scale, scale);

    // Create a new bitmap and convert it to a format understood by the ImageView 
    Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
    width = scaledBitmap.getWidth(); // re-use
    height = scaledBitmap.getHeight(); // re-use
    BitmapDrawable result = new BitmapDrawable(scaledBitmap);
    Log.i("Test", "scaled width = " + Integer.toString(width));
    Log.i("Test", "scaled height = " + Integer.toString(height));

    // Apply the scaled bitmap
    view.setImageDrawable(result);

    // Now change ImageView's dimensions to match the scaled image
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); 
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);

    Log.i("Test", "done");
}

private int dpToPx(int dp) {
    float density = getApplicationContext().getResources().getDisplayMetrics().density;
    return Math.round((float)dp * density);
}

รหัส xml สำหรับImageView:

<ImageView a:id="@+id/image_box"
    a:background="#ff0000"
    a:src="@drawable/star"
    a:layout_width="wrap_content"
    a:layout_height="wrap_content"
    a:layout_marginTop="20dp"
    a:layout_gravity="center_horizontal"/>


ขอขอบคุณการสนทนานี้สำหรับรหัสการปรับขนาด:
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html


ปรับปรุง 7 พฤศจิกายน 2012:
เพิ่มการตรวจสอบตัวชี้โมฆะตามที่แนะนำในความคิดเห็น


1
ImageView จะเป็น 250 * 250 เสมอ
กรกฎาคม

2
ตกลง. ไม่สามารถทำได้ใน xml เท่านั้น ต้องใช้รหัส Java ด้วย xml คุณสามารถปรับขนาดภาพหรือImageViewทั้งสองแบบได้
Jarno Argillander

94
ไม่ทราบว่าคุณสามารถแทนที่ android: ด้วย:
StackOverflow

2
ไอออนเป็นเฟรมเวิร์กสำหรับเครือข่ายแบบอะซิงโครนัสและการโหลดรูปภาพ: github.com/koush/ion
โทมัส

1
Java เป็นภาษาที่น่าเกลียดมากเพราะมันต้องเขียนโค้ดจำนวนมากสำหรับงานง่ายๆ
Dmitry

245

อาจไม่ใช่คำตอบสำหรับคำถามเฉพาะนี้ แต่ถ้ามีใครบางคนเช่นฉันค้นหาคำตอบวิธีการใส่ภาพใน ImageView ด้วยขนาดที่ จำกัด (ตัวอย่างmaxWidth) ในขณะที่รักษาอัตราส่วนภาพแล้วกำจัดพื้นที่ที่ครอบครองโดย ImageView มากเกินไป ทางออกที่ง่ายที่สุดคือการใช้คุณสมบัติต่อไปนี้ใน XML:

    android:scaleType="centerInside"
    android:adjustViewBounds="true"

13
ใช้งานได้หากคุณไม่ต้องการให้ภาพถูกย่อขนาดถ้ามันเล็กเกินไป
Janusz

ฉันจะขยายขนาดหากขนาดเล็กเกินไปและยังคงอัตราส่วนไว้ได้อย่างไร
Kaustubh Bhagwat

หากมีคนต้องการ "fitCenter" เป็นอีกคุณสมบัติหนึ่งสำหรับ scaleType และมันจะไม่ขยายขนาดภาพ แต่สำหรับภาพขนาดใหญ่ใด ๆ มันจะพอดีกับขนาดสูงสุดของภาพภายในกล่องมุมมองที่รักษาอัตราส่วนกว้างยาว
yogesh prajapati

เพื่อขยายภาพขนาดเล็กให้ใช้ scaleType = "centerCrop" แทน
Eaweb

อีกอย่างหนึ่งสำหรับฉันที่จะทำงานกับโซลูชันนี้คือใช้ "android: src" ไม่ใช่ "android: background" เพื่ออ้างอิงภาพของฉัน
Codingpan


23

โค้ดด้านล่างทำให้บิตแมปสมบูรณ์แบบด้วยขนาดภาพที่เท่ากัน รับความสูงและความกว้างของรูปภาพบิตแมปจากนั้นคำนวณความสูงและความกว้างใหม่ด้วยความช่วยเหลือของพารามิเตอร์ของ imageview ที่ให้ภาพที่ต้องการพร้อมอัตราส่วนภาพที่ดีที่สุด

int currentBitmapWidth = bitMap.getWidth();
int currentBitmapHeight = bitMap.getHeight();

int ivWidth = imageView.getWidth();
int ivHeight = imageView.getHeight();
int newWidth = ivWidth;

newHeight = (int) Math.floor((double) currentBitmapHeight *( (double) new_width / (double) currentBitmapWidth));

Bitmap newbitMap = Bitmap.createScaledBitmap(bitMap, newWidth, newHeight, true);

imageView.setImageBitmap(newbitMap)

สนุก.


3
นี่จะเป็นการลดความสูงดั้งเดิมด้วยปัจจัยเดียวกันโดยที่ความกว้างลดลง สิ่งนี้จะไม่รับประกันว่า newHeight <ivHeight เป็นการดีที่คุณควรตรวจสอบว่าอัตราส่วนใดที่ใหญ่กว่า (currentBitmapHeight / ivHeight, currentBitmapWidth / ivWidth) จากนั้นพิจารณาการตัดสินใจต่อไป
สุมิตร Trehan

1
สิ่งนี้ใช้ได้จริงอย่างสมบูรณ์แม้ว่าคุณไม่ต้องการ ivHeight หรือ newWidth เพียงแค่ใส่ ivWidth ลงในการคำนวณแทน
Stuart

14

ลองเพิ่มที่คุณandroid:scaleType="fitXY"ImageView


5
วิธีนี้จะแก้ไขอัตราส่วนภาพหากภาพต้นฉบับไม่ได้ถูกยกกำลังสอง
กรกฎาคม

1
fitXYจะเปลี่ยนอัตราส่วนภาพของภาพเกือบทุกครั้ง OP ระบุไว้อย่างชัดเจนว่าต้องรักษาอัตราส่วนภาพไว้
IcyFlame

7

หลังจากค้นหาหนึ่งวันฉันคิดว่านี่เป็นวิธีที่ง่ายที่สุด:

imageView.getLayoutParams().width = 250;
imageView.getLayoutParams().height = 250;
imageView.setAdjustViewBounds(true);

2
ขอบคุณสำหรับคำตอบที่ดีของคุณ แต่ฉันคิดว่าเป็นการดีกว่าที่จะเพิ่มadjustViewBoundsใน XML

7

ทางออกที่ดีที่สุดที่ใช้งานได้ในกรณีส่วนใหญ่คือ

นี่คือตัวอย่าง:

<ImageView android:id="@+id/avatar"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"/>

1
อย่าพึ่งพา API ที่เลิกใช้แล้ว (fill_parent)
fdermishin

OP ตอบคำถามนี้อย่างไร สิ่งนี้จะไม่รักษาอัตราส่วน aspet
อเล็กซ์

6

ทั้งหมดนี้สามารถทำได้โดยใช้ XML ... วิธีอื่น ๆ ดูค่อนข้างซับซ้อน อย่างไรก็ตามคุณเพียงแค่ตั้งความสูงเป็นสิ่งที่คุณต้องการใน dp จากนั้นตั้งค่าความกว้างเพื่อตัดเนื้อหาหรือในทางกลับกัน ใช้ scaleType fitCenter เพื่อปรับขนาดของภาพ

<ImageView
    android:layout_height="200dp"
    android:layout_width="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@mipmap/ic_launcher"
    android:layout_below="@+id/title"
    android:layout_margin="5dip"
    android:id="@+id/imageView1">

4

ใช้รหัสนี้:

<ImageView android:id="@+id/avatar"
           android:layout_width="fill_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY" />

4

แก้ไขคำตอบของJarno Argillanders :

วิธีปรับภาพให้เหมาะสมกับความกว้างและความสูงของคุณ:

1) เริ่มต้น ImageView และตั้งค่าภาพ:

iv = (ImageView) findViewById(R.id.iv_image);
iv.setImageBitmap(image);

2) ปรับขนาดตอนนี้:

scaleImage(iv);

scaleImageวิธีการแก้ไข: ( คุณสามารถแทนที่ค่าขอบเขต EXPECTED )

private void scaleImage(ImageView view) {
    Drawable drawing = view.getDrawable();
    if (drawing == null) {
        return;
    }
    Bitmap bitmap = ((BitmapDrawable) drawing).getBitmap();

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    int xBounding = ((View) view.getParent()).getWidth();//EXPECTED WIDTH
    int yBounding = ((View) view.getParent()).getHeight();//EXPECTED HEIGHT

    float xScale = ((float) xBounding) / width;
    float yScale = ((float) yBounding) / height;

    Matrix matrix = new Matrix();
    matrix.postScale(xScale, yScale);

    Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
    width = scaledBitmap.getWidth();
    height = scaledBitmap.getHeight();
    BitmapDrawable result = new BitmapDrawable(context.getResources(), scaledBitmap);

    view.setImageDrawable(result);

    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); 
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);
}

และ. xml:

<ImageView
    android:id="@+id/iv_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal" />

ฉันคิดว่านักแสดงนี้: LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams (); ควรใช้วิธีอื่นเนื่องจาก MarginLayoutParams สืบทอดมาจาก ViewGroup.LayoutParams
Jay Jacobs

3

นี่มันสำหรับกรณีของฉัน

             <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                />

2

ถ้ามันไม่ทำงานสำหรับคุณแล้วแทนที่ android: background with android: src

Android: src จะเล่นเคล็ดลับสำคัญ

    <ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:src="@drawable/bg_hc" />

มันทำงานได้ดีเหมือนมีเสน่ห์

ป้อนคำอธิบายรูปภาพที่นี่


1

ฉันจำเป็นต้องมี ImageView และบิตแมปดังนั้นบิตแมปจึงถูกปรับขนาดเป็น ImageView และขนาดของ ImageView จะเหมือนกับบิตแมปที่ปรับขนาด :)

ฉันกำลังดูโพสต์นี้สำหรับวิธีการทำและในที่สุดก็ทำในสิ่งที่ฉันต้องการไม่ใช่วิธีที่อธิบายไว้ที่นี่

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/acpt_frag_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/imageBackground"
android:orientation="vertical">

<ImageView
    android:id="@+id/acpt_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:adjustViewBounds="true"
    android:layout_margin="@dimen/document_editor_image_margin"
    android:background="@color/imageBackground"
    android:elevation="@dimen/document_image_elevation" />

และจากนั้นในวิธี onCreateView

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_scanner_acpt, null);

    progress = view.findViewById(R.id.progress);

    imageView = view.findViewById(R.id.acpt_image);
    imageView.setImageBitmap( bitmap );

    imageView.getViewTreeObserver().addOnGlobalLayoutListener(()->
        layoutImageView()
    );

    return view;
}

แล้วรหัส layoutImageView ()

private void layoutImageView(){

    float[] matrixv = new float[ 9 ];

    imageView.getImageMatrix().getValues(matrixv);

    int w = (int) ( matrixv[Matrix.MSCALE_X] * bitmap.getWidth() );
    int h = (int) ( matrixv[Matrix.MSCALE_Y] * bitmap.getHeight() );

    imageView.setMaxHeight(h);
    imageView.setMaxWidth(w);

}

และผลลัพธ์ก็คือภาพจะพอดีภายในอย่างสมบูรณ์รักษาอัตราส่วนและไม่มีพิกเซลเหลือจาก ImageView เมื่อบิตแมปอยู่ข้างใน

ผลลัพธ์

เป็นสิ่งสำคัญที่ ImageView จะต้องมี wrap_content และ adjustViewBounds เป็น True จากนั้น setMaxWidth และ setMaxHeight จะทำงานได้ซึ่งจะเขียนในซอร์สโค้ดของ ImageView

/*An optional argument to supply a maximum height for this view. Only valid if
 * {@link #setAdjustViewBounds(boolean)} has been set to true. To set an image to be a
 * maximum of 100 x 100 while preserving the original aspect ratio, do the following: 1) set
 * adjustViewBounds to true 2) set maxWidth and maxHeight to 100 3) set the height and width
 * layout params to WRAP_CONTENT. */

0

ฉันต้องการทำสิ่งนี้ให้สำเร็จในรูปแบบข้อ จำกัด ด้วย Picasso ดังนั้นฉันจึงผสมคำตอบข้างบนแล้วจึงหาคำตอบ (ฉันรู้อัตราส่วนภาพที่ฉันกำลังโหลดอยู่แล้ว):

เรียกว่ารหัสกิจกรรมของฉันที่ไหนซักแห่งหลังจาก setContentView (... )

protected void setBoxshotBackgroundImage() {
    ImageView backgroundImageView = (ImageView) findViewById(R.id.background_image_view);

    if(backgroundImageView != null) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int width = displayMetrics.widthPixels;
        int height = (int) Math.round(width * ImageLoader.BOXART_HEIGHT_ASPECT_RATIO);

        // we adjust the height of this element, as the width is already pinned to the parent in xml
        backgroundImageView.getLayoutParams().height = height;

        // implement your Picasso loading code here
    } else {
        // fallback if no element in layout...
    }
}

ใน XML ของฉัน

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="0dp">

    <ImageView
        android:id="@+id/background_image_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitStart"
        app:srcCompat="@color/background"
        android:adjustViewBounds="true"
        tools:layout_editor_absoluteY="0dp"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginLeft="0dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <!-- other elements of this layout here... -->

</android.support.constraint.ConstraintLayout>

โปรดสังเกตว่าไม่มีแอตทริบิวต์ constraintBottom_toBottomOf ImageLoaderเป็นคลาสแบบคงที่ของฉันสำหรับวิธีการโหลดรูปภาพและค่าคงที่


0

ฉันใช้โซลูชันที่ง่ายมาก นี่รหัสของฉัน:

imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.getLayoutParams().height = imageView.getLayoutParams().width;
imageView.setMinimumHeight(imageView.getLayoutParams().width);

รูปภาพของฉันถูกเพิ่มเข้าแบบไดนามิกในมุมมองกริด เมื่อคุณทำการตั้งค่าเหล่านี้ไปยังมุมมองภาพรูปภาพสามารถแสดงโดยอัตโนมัติในอัตราส่วน 1: 1


0

ใช้คณิตศาสตร์อย่างง่ายเพื่อปรับขนาดภาพ ทั้งที่คุณสามารถปรับขนาดImageViewหรือคุณสามารถปรับขนาดภาพ drawable ImageViewกว่าตั้งอยู่บน ค้นหาความกว้างและความสูงของบิตแมปของคุณที่คุณต้องการตั้งค่าImageViewและเรียกใช้วิธีการที่ต้องการ สมมติว่าความกว้างของคุณ 500 สูงกว่าความสูงกว่าวิธีการโทร

//250 is the width you want after resize bitmap
Bitmat bmp = BitmapScaler.scaleToFitWidth(bitmap, 250) ;
ImageView image = (ImageView) findViewById(R.id.picture);
image.setImageBitmap(bmp);

คุณใช้คลาสนี้สำหรับปรับขนาดบิตแมป

public class BitmapScaler{
// Scale and maintain aspect ratio given a desired width
// BitmapScaler.scaleToFitWidth(bitmap, 100);
 public static Bitmap scaleToFitWidth(Bitmap b, int width)
  {
    float factor = width / (float) b.getWidth();
    return Bitmap.createScaledBitmap(b, width, (int) (b.getHeight() * factor), true);
  }


  // Scale and maintain aspect ratio given a desired height
  // BitmapScaler.scaleToFitHeight(bitmap, 100);
  public static Bitmap scaleToFitHeight(Bitmap b, int height)
  {
    float factor = height / (float) b.getHeight();
    return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factor), height, true);
   }
 }

รหัส xml คือ

<ImageView
android:id="@+id/picture"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:adjustViewBounds="true"
android:scaleType="fitcenter" />

0

คำตอบที่รวดเร็ว:

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center"
        android:src="@drawable/yourImage"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.