从顶部和侧面按百分比划分屏幕

时间:2014-02-04 20:57:27

标签: android android-layout screen-resolution

我正在尝试创建一个布局,图像左侧屏幕尺寸为20%,右侧屏幕尺寸为20%,屏幕尺寸为30%。我可以将图像定位为距离侧面20%的距离,但不知道如何同时组合顶部和侧面的百分比。现在我正在使用 android:layout_marginTop 从顶部边缘跳转。我想在任何屏幕分辨率上使用能从顶部获得30%可用空间的东西。请看图1。非常感谢您的帮助。

Fig. 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>

3 个答案:

答案 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应该水平定向。

对于保证金来说,这不是一个干净的解决方案。如果它不起作用,你应该动态地进行

让我知道它是否有效