<com.ritesh.ratiolayout.RatioRelativeLayout
android:id="@+id/activity_main_ratio_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:fixed_attribute="WIDTH" // Fix one side of the layout
app:horizontal_ratio="2" // ratio of 2:3
app:vertical_ratio="3">
8条答案
按热度按时间ou6hu8tu1#
随着ConstraintLayout的引入,您不必编写任何一行代码,也不必使用第三方或依赖于
PercentFrameLayout
,后者在26.0.0中已被弃用。以下是如何使用
ConstraintLayout
使布局保持1:1纵横比的示例:也可以直接在版面编辑器中编辑版面,而不是编辑XML文件:
5vf7fwbs2#
在您的 build.gradle 中添加:
并在您的 * layout.xml*wrap任何视图或视图组中遵循PercentFrameLayout内的比率,其中:
然后对于您想要遵循比例的视图或视图组替换android:layout_width 和 android:layout_height:
并且您有一个纵横比为16:9(1.78:1)的视图或视图组,其宽度与父视图匹配,高度也相应调整。
注意:删除正常的宽度和高度属性是很重要的。棉绒会抱怨,但它会工作。
7lrncoxx3#
您可以尝试将
layout_height
初始设置为wrap_content
,但从那里开始,我认为您必须进入代码。为了进行实验,在您的活动中尝试以下内容:其中
R.id.squareView
是相关视图的id
。注意,此代码被 Package 在onGlobalLayout
调用中,以确保squareView.getWidth()
具有有意义的值。pvabu6sv4#
我创建了一个布局库类似的用例。请随意使用它。
RatioLayouts
安装
将此添加到文件的顶部
用法
在布局中的根视图上定义"app"命名空间
在布局中包含此库
ccgok5k55#
如果您想保留纵横比并且父布局必须是“wrap_content”(对于包含可变文本的文本视图很有用),您可以添加一个伪视图,它将保留纵横比,并且其他元素必须约束到该视图:
omvjsjqw6#
uklbhaso7#
bfrts1fy8#
设置高度为
fill_parent
,宽度为wrap_content
然后用
android:adjustViewBounds="true"
固定纵横比