This is a specified proportion to the size of the Layout or View support library

Overview

Android-RatioLayout Build Status Download

This is a specified proportion to the size of the Layout or View support library, with which you can easily set a fixed ratio of the size of the Layout or View, internal adaptive size calculation, completely abandon the code to calculate the size! If you have any questions in the course or suggestions, please send an e-mail to the following e-mail, thank you!

For more information please see the website

Screenshots

Sample Sample

Android-RatioLayout with xml code

">
<net.soulwolf.widget.ratiolayout.widget.RatioFrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    app:datumRatio="datumWidth"
    app:widthRatio="16.0"
    app:heightRatio="9.0"
    android:layout_height="wrap_content">

    <net.soulwolf.widget.ratiolayout.widget.RatioImageView
        android:id="@+id/image2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:datumRatio="datumWidth"
        app:widthRatio="16.0"
        app:heightRatio="7.0"
        android:scaleType="centerCrop"/>

    <net.soulwolf.widget.ratiolayout.widget.RatioTextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="25sp"
        android:textStyle="bold"
        android:gravity="center"
        app:datumRatio="datumWidth"
        app:widthRatio="16.0"
        android:background="@color/sample_text"
        app:heightRatio="7.0"
        android:text="RatioImageView/RatioTextView:16*7"
        android:textColor="@android:color/white"/>

net.soulwolf.widget.ratiolayout.widget.RatioFrameLayout>

<LinearLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:orientation="horizontal">

    <net.soulwolf.widget.ratiolayout.widget.RatioTextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@color/sample_primary"
        android:gravity="center"
        android:text="Square"
        android:textColor="@android:color/white"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layoutSquare="true"/>

    <net.soulwolf.widget.ratiolayout.widget.RatioView
        android:layout_width="15dp"
        android:layout_height="wrap_content"
        app:heightRatio="1"
        app:widthRatio="1"/>

    <net.soulwolf.widget.ratiolayout.widget.RatioTextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@color/sample_primary"
        android:gravity="center"
        android:text="AspectRatio:1.0"
        android:textColor="@android:color/white"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layoutAspectRatio="1"/>

LinearLayout>

<net.soulwolf.widget.ratiolayout.widget.RatioRelativeLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    app:datumRatio="datumWidth"
    app:widthRatio="15.0"
    app:layout_marginTop="8dp"
    app:heightRatio="10.0"
    app:layout_height="wrap_content"/>
		

Android-RatioLayout with java code

RatioFrameLayout ratioFrameLayout = new RatioFrameLayout(context);
ratioFrameLayout.setRatio(datumRatio,widthRatio,heightRatio);
ratioFrameLayout.setSquare(square);
ratioFrameLayout.setAspectRatio(aspectRatio);

Attr params info

attrName Explanation
datumRatio This parameter indicates the ratio is calculated based on Width Or Height! Default auto
widthRatio This parameter indicates the proportion of the size Width
heightRatio This parameter indicates the proportion of the size Height
layoutSquare This parameter indicates the proportion of the square
layoutAspectRatio This parameter indicates the proportion of the (width / height)

Implementing View!

  • RatioAbsoluteLayout
  • RatioLinearLayout
  • RatioButton
  • RatioCheckBox
  • RatioCheckedTextView
  • RatioEditText
  • RatioFrameLayout
  • RatioGridLayout
  • RatioImageButton
  • RatioImageView
  • RatioProgressBar
  • RatioRadioButton
  • RatioRadioGroup
  • RatioRelativeLayout
  • RatioSpace
  • RatioTableLayout
  • RatioTextView
  • RatioGridView
  • RatioListView
  • RatioRecyclerView
  • RatioCardView

Custom

public class RatioFrameLayout extends FrameLayout implements RatioMeasureDelegate {

    private RatioLayoutDelegate mRatioLayoutDelegate;


    public RatioFrameLayout(Context context) {
        super(context);
    }

    public RatioFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        mRatioLayoutDelegate = RatioLayoutDelegate.obtain(this, attrs);
    }

    public RatioFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mRatioLayoutDelegate = RatioLayoutDelegate.obtain(this, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public RatioFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        mRatioLayoutDelegate = RatioLayoutDelegate.obtain(this, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mRatioLayoutDelegate != null) {
            mRatioLayoutDelegate.update(widthMeasureSpec, heightMeasureSpec);
            widthMeasureSpec = mRatioLayoutDelegate.getWidthMeasureSpec();
            heightMeasureSpec = mRatioLayoutDelegate.getHeightMeasureSpec();
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    public void setRatio(RatioDatumMode mode, float datumWidth, float datumHeight) {
        if (mRatioLayoutDelegate != null) {
            mRatioLayoutDelegate.setRatio(mode, datumWidth, datumHeight);
        }
    }

    @Override
    public void setSquare(boolean square) {
        if (mRatioLayoutDelegate != null) {
            mRatioLayoutDelegate.setSquare(square);
        }
    }

    @Override
    public void setAspectRatio(float aspectRatio) {
        if (mRatioLayoutDelegate != null) {
            mRatioLayoutDelegate.setAspectRatio(aspectRatio);
        }
    }
}

Maven


   
  
    
     net.soulwolf.widget
    
  
    
     ratiolayout
    
  
    
     2.1.0
    
  
    
     pom
    

   

Gradle

allprojects {
   repositories {
      jcenter()
   }
}

compile 'net.soulwolf.widget:ratiolayout:2.1.0'

Developed by

Amphiaraus - [email protected]

License

Copyright 2015 The Android Open Source Project for Android-RatioLayout

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
You might also like...
A simple, classic Kotlin MVI implementation based on coroutines with Android support, clean DSL and easy to understand logic

A simple, classic Kotlin MVI implementation based on coroutines with Android support, clean DSL and easy to understand logic

Backend Project to support providing help to refugees

Project Project to implement the matching of guests and hosts, with special attention to verification of matches. Get it, run it: In order to build th

BlurHash support for iOS, Android and JVM via Kotlin Multiplatform
BlurHash support for iOS, Android and JVM via Kotlin Multiplatform

blurhash A Kotlin Multiplatform library to use blurhash in your Android App, iOS / Mac App & JVM Backend. Android iOS JVM Why? If you've tried using b

A beautiful Fashion Store like Android App Mock built on Jetpack Compose with compose navigation, hilt, dark theme support and google's app architecture found on uplabs Here
A beautiful Fashion Store like Android App Mock built on Jetpack Compose with compose navigation, hilt, dark theme support and google's app architecture found on uplabs Here

A beautiful Fashion Store like Android App Mock built on Jetpack Compose with compose navigation, hilt, dark theme support and google's app architecture found on uplabs Here

Adds emoji support to the Minecraft chat.

WeirdChat 🥴 WeirdChat is a FabricMC mod that adds Emoji support to the Minecraft chat. Instead of completely rewriting the text renderer, Discord emo

View
View "injection" library for Android.

Kotter Knife Deprecated: This was a terrible idea because it allocates an object for every view reference. Do not use, and do not use anything like it

A library for creating dynamic skeleton view
A library for creating dynamic skeleton view

Skeleton Placeholder View Overview A Library designed to draw a Skeleton by "skinning" the view from a provided layout. Skeleton is composed of Bone w

A library for otp view with gradient and lines

AndroidOtpView (With gradient color in lines) Preview Otp View library for Android Getting started Add it in your root build.gradle at the end of repo

Android sliding panel that is part of the view hierarchy, not above it.
Android sliding panel that is part of the view hierarchy, not above it.

sliding-panel A ViewGroup that implements a sliding panel that is part of the view hierarchy, not above it. Difference from other libraries All other

Comments
  • 反馈Android-RatioLayout问题

    反馈Android-RatioLayout问题

    你好,当前我设置heightRatio和widthRatio比例后,然后我将手机切换成横屏模式,正确的情况应该是heightRatio和widthRatio的值调换一下顺序,这样才能够适配横屏,但是当我切换横屏模式后它们没有被调换,导致横屏使用的比例是竖屏的比例,导致横屏无法适配,这种情况应该怎么做呢?

    opened by tcqq 4
  • Square Layout

    Square Layout

    I know it's easy to create square layout - it's special case of RatioLayout with widthRatio=1 and heightRatio=1. However, could you please make square layout built-in in this library?

    opened by anticafe 3
  • RecyclerView GridLayoutManager

    RecyclerView GridLayoutManager

    image

    RecyclerView GridLayoutManager

    <net.soulwolf.widget.ratiolayout.widget.RatioImageView
        android:layout_width="match_parent"
        android:layout_height="@dimen/public_height_20"
        android:background="@android:color/holo_blue_bright"
        app:datumRatio="datumHeight"
        app:heightRatio="1"
        app:widthRatio="3" />
    
    opened by ZQ7 0
  • RatioFrameLayout is not rounding its corner from bottom

    RatioFrameLayout is not rounding its corner from bottom

    I have added RationFrameLayout but it is not rounding from bottom

    
            <net.soulwolf.widget.ratiolayout.widget.RatioFrameLayout
                android:layout_width="@dimen/_40sdp"
                android:layout_height="@dimen/_40sdp"
                android:visibility="gone"
                tools:visibility="visible"
                app:cardCornerRadius="4dp"
                app:cardElevation="4dp"
                app:datumRatio="datumAuto"
                app:layoutAspectRatio="1.0" />
    
    opened by FazalHussain 0
Blinking-image-view - A variant of Android View that blinks only the source image (not the background)

Blinker View for Android What is this? Blinker View is an Android View that blinks a given drawable. Yes, it's that simple. Place it in your layout an

Milos Marinkovic 4 Jul 29, 2020
A Kotlin work manager library for Android with progress notifications and Hilt support.

Boot Laces A kotlin work manager library for Android that includes notifications and Hilt support. User Instructions Add the JitPack repository to you

Chris Basinger 35 Oct 8, 2022
Dependency Injection library for Kotlin Multiplatform, support iOS and Android

Multiplatform-DI library for Kotlin Multiplatform Lightweight dependency injection framework for Kotlin Multiplatform application Dependency injection

Anna Zharkova 32 Nov 10, 2022
Android Parcelable support for the Kotlinx Serialization library.

Android Parcelable support for the Kotlinx Serialization library.

Christopher 50 Nov 20, 2022
Android Bundle format support for Kotlinx Serialization.

Bundlizer Android Bundle format support for Kotlinx Serialization. Usage Annotate your data models with @Serializable: import kotlinx.serialization.Se

Ahmed Mourad 69 Nov 9, 2022
Cross-platform framework for building truly native mobile apps with Java or Kotlin. Write Once Run Anywhere support for iOS, Android, Desktop & Web.

Codename One - Cross Platform Native Apps with Java or Kotlin Codename One is a mobile first cross platform environment for Java and Kotlin developers

Codename One 1.4k Jan 9, 2023
Minecraft NBT support for kotlinx.serialization

knbt An implementation of Minecraft's NBT format for kotlinx.serialization. Technical information about NBT can be found here. Using the same version

Ben Woodworth 41 Dec 21, 2022
Template (pure) for KMM application with DI support

KMM di template Template (pure) for KMM application with DI support. Uses Multiplatform-DI for Dependency Injection Features Common architecture (VIP)

Anna Zharkova 8 Oct 18, 2022
Wrapper of FusedLocationProviderClient for Android to support modern usage like LiveData and Flow

FancyLocationProvider Wrapper of FusedLocationProviderClient for Android to support modern usage like LiveData or Flow. Install Add Jitpack repository

Jintin 66 Aug 15, 2022
Kotlin multiplatform decorators support

DEKORATOR [WIP] Decorator support for Kotlin! Built with ❤ , powered by Kotlin compiler plugin. Support The plugin only works on targets using new IR

Martynas Petuška 3 Mar 18, 2022