直接上代码(代码可直接复制使用)

1、布局设置

ConstraintLayout 有个属性可以控制比例:layout_constraintDimensionRatio

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/constraintLayout"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="0dp"

android:layout_height="wrap_content"

android:src="@drawable/head_female_icon"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintDimensionRatio="5:4"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

image.png

2、代码设置

//根据宽高比设置控件宽高, 如设置宽高比为5:4,那么widthRatio为5,heightRatio为4

public static void setWidthHeightWithRatio(View view, int width, int widthRatio, int heightRatio) {

if (width <= 0) width = view.getWidth();

int height = width * heightRatio / widthRatio;

ViewGroup.LayoutParams layoutParams = view.getLayoutParams();

if (layoutParams != null) {

layoutParams.height = height;

layoutParams.width = width;

view.setLayoutParams(layoutParams);

}

}

3、自定义控件式

新建RatioRelativeLayout 继承RelativeLayout

import android.content.Context;

import android.content.res.TypedArray;

import android.util.AttributeSet;

import android.widget.RelativeLayout;

/**

* 自定义高宽比布局

*/

public class RatioRelativeLayout extends RelativeLayout {

private float ratio;

public RatioRelativeLayout(Context context) {

super(context);

}

public RatioRelativeLayout(Context context, AttributeSet attrs) {

super(context, attrs);

//获取自定义属性值

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioRelativeLayout);

ratio = typedArray.getFloat(R.styleable.RatioRelativeLayout_ratio, 0.0f);

}

public RatioRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

//获取宽度的模式和尺寸

int widthSize = MeasureSpec.getSize(widthMeasureSpec);

if (ratio != 0) {

//根据宽高比ratio和模式创建一个测量值

heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) (widthSize * ratio), MeasureSpec.EXACTLY);

}

//必须调用下面的两个方法之一完成onMeasure方法的重写,否则会报错

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

/**

* 设置高宽比

*

* @param ratio 宽高比(比如:高:宽 = 4:5,ratio=0.8)

*/

public void setRatio(float ratio) {

this.ratio = ratio;

}

}

在styles.xml文件中添加自定义属性

使用

android:id="@id/common_relate_layout_id"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:ratio="1"/>

android设置高度比例,Android View设置宽高比相关推荐

  1. android设置高度比例,Android控件设置宽高比的方法

    0. 困扰很久的问题 Android控件的宽和高保持比例,这是从我接触Android以来,一直不断会遇到的需求.以前,要么就是在代码里直接设置宽和高,要么就是自定义控件.网上也有开源的自定义ViewG ...

  2. android设置高度比例,android开发layout按比例布局(详解)

    释放双眼,带上耳机,听听看~! 由于Android的复杂性,在写程序的时候经常会遇见一些难题,也可能会遇见处理不了的问题,下面是技术狗小编详解android layout 按比例布局的代码,一起进入下 ...

  3. 关于div容器高度随着浏览器宽度按照宽高比自适应的问题(css解决方案)

    div容器html代码: <div class="swiper"></div> div容器样式代码(此处的31.25%为div容器内容的宽高比,比如div内 ...

  4. [Android] ListView关于adapter多种view设置

    使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...

  5. android开发根据分辨率设置高度,【android】根据屏幕分辨率设置底栏高度

    标签:安卓 public void setFooterHeightWithScreen() { //得到屏幕分辨率 int srcWidth =getWindowManager().getDefaul ...

  6. Android图片颜色比例,Android开发学习之路-图片颜色获取器开发(1)

    系列第一篇,从简单的开始,一步一步完成这个小项目. 颜色获取就是通过分析图片中的每个像素的颜色,来分析整个图片的主调颜色,有了主调颜色,我们可以用于图片所在卡片的背景或者标题颜色,这样整体感更加强烈. ...

  7. android 主流屏幕比例,Android 主流屏幕以及适配

    一.Android版本比例测试:(数据来源:腾讯优测) 较主流的系统版本:部分旗舰机可以适配android7.0:目前大部分手机为6.0,比如各大厂商的旗舰机,其余大部分为android5.0,一般可 ...

  8. android模拟器用户比例,[Android]如何给android4.2模拟器开启多用户

    上周同时拿到了android4.2的SDK和源代码,启动了个手机版的模拟器,结果发现多用户用不起来,后来查看源代码发现卡在一个地方: #vi frameworks/base/core/java/and ...

  9. android gridview设置高度,android设置GridView高度自适应,实现全屏铺满效果

    使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gr ...

  10. Android中PopupWindow遮罩层的设置

    在Android应用开发中,PopupWindow是很常见的,也是我们经常用到的,这里先来说说一下属性: popupWindow.showAsDropDown(view,view.getWidth() ...

最新文章

  1. 解决Linux安装过程中不能安装Grub的问题
  2. 【OpenCV3】图像的读取、显示与保存
  3. Oracle 用户、对象权限、系统权限
  4. Ubuntu中vi / vim编辑器快捷操作
  5. python web server_Python实现简易版的Web服务器(推荐)
  6. 批处理命令Start
  7. 安装串口设备驱动时遇到 Windows 无法验证此设备所需的驱动程序的数字签名。最近的硬件或软件更改安装的文件可能未正确签名或已损坏,或者可能是来自未知来源的恶意软件. 问题该如何处理?...
  8. freeradius+mysql+交换机认证
  9. Apache POI 安全漏洞
  10. 用python怎样解偏微分方程组_用Python数值求解偏微分方程
  11. 大数据进阶(一):4个最受欢迎的大数据可视化工具(抛砖引玉篇)
  12. 按头安利 好看又实用的手绘图标素材看这里
  13. 程序员在国外:在加拿大IT公司工作三年的一些感受
  14. html+css基础教程之html简介和元素
  15. 第四章 sysrepo共享内存机制
  16. 华为服务器管理工具uMATE
  17. CF1027D Mouse Hunt(topo总结)
  18. 霸气!女学霸考692分想当“程序媛”,女王式发言:也没见男生考得比我好
  19. TYPEC 转HDMI VGA+PD+ USB3.0 HUB+TF/CF/SD+RJ45等多功能扩展坞方案设计资料|TYPE-C转HDMI转VGA带PD USB3.0多功能拓展器方案介绍
  20. PDF中几个的空白页怎么删除?

热门文章

  1. python爬虫练习2:取道指成分股数据
  2. 如何刷访问量 的详细介绍
  3. 微信小游戏制作坦克大战(二)添加主角坦克
  4. 如何提高你的工作效率
  5. ppt编辑数据链接文件不可用_excel表格编辑数据不可用-ppt插入的自带图表点击编辑数据时显示链接文件不可用...
  6. 软件测试之TCP、UPD协议详解
  7. python初学:expected an indented block 报错
  8. Dbviusalizer报错Java.lang.ClassCastException: javax.swing.KeyStroke cannot be cast to java.lang.Compar
  9. MSP430f149红外接收头——读任意红外遥控器键值并显示于数码管
  10. MyCms 活码二维码(动态二维码)源码版介绍