Skip to content

Latest commit

 

History

History
131 lines (94 loc) · 2.92 KB

README_zh.md

File metadata and controls

131 lines (94 loc) · 2.92 KB

Android-ScaleLayout

一个简单的,方便的多屏适配的Android库

本质就是百分比缩放

和 android-percent-support-lib 的不同

  1. 更科学
    android-percent-support-lib 是父控件和子控件的百分比关系
    Android-ScaleLayout 是设计界面和设备界面的百分比关系

  2. 更方便 android-percent-support-lib 需要把设计尺寸算成百分比
    Android-ScaleLayout 直接把设计尺寸填入layou.xml即可

How to look?

screenhot

原理

float realPixel = percent * designPixel

Pix Mode

float realPixel = percent * designPixel

float percent = mScreenWidth / designScreenWidth

float designPixel = res.getDimensionPixelSize()
float realPixel = mScreenWidth * res.getDimensionPixelSize() / designScreenWidth

DP Mode

float realPixel = percent * designPixel

float percent = mScreenWidth / designScreenWidth
float designPixel = designDP * designDensity // dp to pixel

float designDP = res.getDimensionPixelSize() / mDensity
float realPixel = (mScreenWidth * designDensity * getPixelSize()) / (designScreenWidth * mDensity)

使用

0. 依赖

dependencies {
    compile 'cn.gavinliu.android.lib:ScaleLayout:1.0.4'
}

1. 初始化

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        ScaleConfig.create(this,
            1080, // Design Width
            1920, // Design Height
            3,    // Design Density
            3,    // Design FontScale
            ScaleConfig.DIMENS_UNIT_DP);
    }
}

Android 文字大小的单位是 sp,字体的缩放方式需要 FontScale: float fontScale = ctx.getResources().getDisplayMetrics().scaledDensity;

2. Scale***Layout

只需要把 FrameLayout LinearLayout RelativeLayout 替换成 ScaleFrameLayout ScaleLinearLayout ScaleRelativeLayout.

3. Scale by width or height

默认是 width,当然你可以用属性修改。

<attr name="layout_scale_by" format="enum">
    <enum name="width" value="0"/>
    <enum name="height" value="1"/>
</attr>
app:layout_scale_by="width"

支持的属性

<attr name="android:layout_width"/>
<attr name="android:layout_height"/>

<attr name="android:layout_margin"/>
<attr name="android:layout_marginLeft"/>
<attr name="android:layout_marginTop"/>
<attr name="android:layout_marginRight"/>
<attr name="android:layout_marginBottom"/>
<attr name="android:layout_marginStart"/>
<attr name="android:layout_marginEnd"/>

<attr name="android:padding"/>
<attr name="android:paddingLeft"/>
<attr name="android:paddingTop"/>
<attr name="android:paddingRight"/>
<attr name="android:paddingBottom"/>
<attr name="android:paddingStart"/>
<attr name="android:paddingEnd"/>

<!-- TextView -->
<attr name="android:textSize"/>

License

MIT