it-swarm.cn

将UI元素的位置/大小设置为屏幕大小的百分比

我正在努力研究在创建布局时是否可以使用百分比位置/大小。我想要的是这样的......

^
|
|
| 68%
|
|
v
Gallery (height equivalent of 16% total screen size)
^
| 16%
v

我正在测试一个设备,它在横向上有800x480实际像素的显示,我正在用以下强制它...

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" > 
    <Gallery 
        Android:id="@+id/gallery"
        Android:layout_width="fill_parent"
        Android:layout_height="80px"
        Android:layout_marginTop ="320px"
    />
</RelativeLayout>

显然我不想对固定的px单元进行硬编码,但我不能将68%0.68用于layout_marginTop(例如)。我看过dp单位,但我不确定我是否也可以这样做。

我不得不承认UI设计是我的一个弱点,所以任何建议都会感激不尽。

编辑: 为了将来参考,如果有人正在寻找类似的答案,遵循艾伦摩尔的建议,我有以下工作我正是我想要的...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:background="@drawable/bground"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >
    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="0dp"
        Android:layout_weight="0.68"
        Android:background="@Android:color/transparent"
    />
    <Gallery 
        Android:id="@+id/gallery"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="0.16"
    />
    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="0dp"
        Android:layout_weight="0.16" 
        Android:background="@Android:color/transparent"
    />
</LinearLayout>

我设法找到了一些使用layout_weight的其他例子,并决定将TextView高度设置为0dp,并使用浮点数作为权重。工作得很好。 :)

66
Squonk

我想你想要的是设置Android:layout_weight,

http://developer.Android.com/resources/tutorials/views/hello-linearlayout.html

像这样的东西(我只是将文本视图放在上面和下面作为占位符):

  <LinearLayout
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:weightSum="1">
    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="0dp"
        Android:layout_weight="68"/>
    <Gallery 
        Android:id="@+id/gallery"
        Android:layout_width="fill_parent"
        Android:layout_height="0dp"

        Android:layout_weight="16"
    />
    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="0dp"
        Android:layout_weight="16"/>

  </LinearLayout>
65
Alan Moore

使用 PercentRelativeLayoutPercentFrameLayout 来自 Percent of Supoort Library

<Android.support.percent.PercentFrameLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
     <TextView
          Android:layout_width="match_parent"
          app:layout_heightPercent="68%"/>
     <Gallery 
          Android:id="@+id/gallery"
          Android:layout_width="match_parent"
          app:layout_heightPercent="16%"/>
     <TextView
          Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:layout_width="match_parent"/>
</Android.support.percent.PercentFrameLayout>
17
3xplore

对于TextView及其后代(例如Button),您可以从WindowManager获取显示大小,然后将TextView高度设置为其中的一小部分:

Button btn = new Button (this);
Android.view.Display display = ((Android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
btn.setHeight((int)(display.getHeight()*0.68));
15
joseph_morris

使用 ConstraintLayout 通过指南也可以解决上述问题。

以下是片段。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.constraint.Guideline
    Android:id="@+id/upperGuideLine"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.68" />

<Gallery
    Android:id="@+id/gallery"
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/lowerGuideLine"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/upperGuideLine" />

<Android.support.constraint.Guideline
    Android:id="@+id/lowerGuideLine"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.84" />

</Android.support.constraint.ConstraintLayout>
5
Ujwal Agrawal

看看这个:

http://developer.Android.com/reference/Android/util/DisplayMetrics.html

您可以获得屏幕的高度,并且可以通过简单的数学计算出68%的屏幕。

1
Finn Larsen