我正在尝试创建一个布局,图像左侧屏幕尺寸为20%,右侧屏幕尺寸为20%,屏幕尺寸为30%。我可以将图像定位为距离侧面20%的距离,但不知道如何同时组合顶部和侧面的百分比。现在我正在使用 android:layout_marginTop 从顶部边缘跳转。我想在任何屏幕分辨率上使用能从顶部获得30%可用空间的东西。请看图1。非常感谢您的帮助。
XML代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100" >
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginTop="100dp"
android:layout_weight="60"
android:src="@drawable/logo_line" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
</LinearLayout>
答案 0 :(得分:3)
我有一个动态的解决方案:
final Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);
final WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = (int) (size.x * 0.6);
params.height = (int) (size.y * 0.6);
这将是高度减少20%(100% - (20%+ 20%))和宽度相同。
----编辑----
上述解决方案是格式化布局窗口本身。要仅使用布局项目,我会选择:
final TextView tv = findViewById(R.id.my_text_view);
LinearLayout.LayoutParams tvlp = (LinearLayout.LayoutParams) tv.getLayoutParams();
tvlp.rightMargin *= 0.6;
tvlp.leftMargin *= 0.6;
tvlp.topMargin *= 0.6;
tvlp.bottomMargin *= 0.6;
这将重新定位TextView
的布局。
答案 1 :(得分:3)
使用RelativeLayout或将ImageView包装在LinearLayout中:
----编辑----
在ImageView上的:取出layout_gravity和margin_top属性并将layout_height设置为0dp
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100" >
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="60"
android:orientation="vertical"
android:weightSum="100" >
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="40"
android:src="@drawable/logo_line" />
</LinearLayout>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
</LinearLayout>
答案 2 :(得分:1)
将ImageView放在另一个LinearLayout中,以便设置水平权重(ImageView所在的LinearLayout)和另一个垂直权重
<强>被修改强>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30" />
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:weigth="40"
android:weightSum="100" >
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="60"
android:src="@drawable/logo_line" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30" />
</LinearLayout>
这应该工作..重要的是视图的正确配置和LinearLayouts的方向。
创建一个包含3个“项目”的LinearLayout
,其宽度与其父级匹配。
您可以为它们设置所有权重,从而创建垂直(上/下)边距。
然后LinearLayout中的第二项应该是另一个创建水平(左/右)边距的LinearLayout。此LinearLayout应该水平定向。
对于保证金来说,这不是一个干净的解决方案。如果它不起作用,你应该动态地进行
让我知道它是否有效