Android布局缩放(对于dp中给定大小的元素)

时间:2016-03-25 00:45:52

标签: android layout scale dimensions

三种不同背景颜色的FrameLayout形成条带。 每个FrameLayout都具有dp。

中指定的大小

[1]

很长,不适合屏幕。 如何缩放条带以保持纵横比并且不改变尺寸dp?

[2]

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:measureAllChildren="true">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layoutDirection="ltr"
        android:rotation="0">

    <FrameLayout
        android:layout_width="200dp"
        android:layout_height="42dp"
        android:background="#508da6"
         />
    <FrameLayout
        android:layout_width="400dp"
        android:layout_height="42dp"
        android:background="#494949"
        />
    <FrameLayout
        android:layout_width="240dp"
        android:layout_height="42dp"
        android:background="#ff0000"
       />
    </LinearLayout>
</FrameLayout>

1 个答案:

答案 0 :(得分:0)

没有必要为此夸大三个整个FrameLayout.View会做得很好。此外,您不应该给出固定宽度,因为无法使其适用于所有屏幕尺寸。

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:measureAllChildren="true">

    <LinearLayout 
        android:id="@+id/strip"
        android:layout_width="match_parent"
        android:layout_height="42dp"
        android:layoutDirection="ltr"
        android:rotation="0">

        <View
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#508da6"
            />
        <View
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#494949"
            />
        <View
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ff0000"
            />
    </LinearLayout>
</FrameLayout>

在运行时设置高度

 LinearLayout stripLayout = (LinearLayout)findVieById(R.id.strip);
  stripLayout .getViewTreeObserver().addOnGlobalFocusChangeListener(new OnGlobalFocusChangeListener() {

        @Override
        public void onGlobalFocusChanged(View oldFocus, View newFocus) {
            // TODO Auto-generated method stub
            int width = stripLayout .getWidth();
            int height = //calculate your height//
            FrameLayout.LayoutParams params = stripLayout .getLayoutParams();
            params.height = height;
            stripLayout .setLayoutParams(params);

            if (Build.VERSION.SDK_INT < 16) { stripLayout .getViewTreeObserver().removeGlobalOnLayoutListener(this);   } 
            else { stripLayout .getViewTreeObserver().removeOnGlobalLayoutListener(this);  }
        }
    });