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

我试图解决在创build布局时是否可以使用百分比位置/大小。 我想要的是这样的…

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

我正在testing一个横向显示800×480实际像素的设备,目前我正在用以下命令强制它:

 <?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单位,但我不能使用layout_marginTop 68%0.68 (例如)。 我已经看过dp单元,但我不确定是否可以这样做。

我不得不承认UIdevise是我的一个弱点,所以任何build议都会受到感谢。

编辑:为了将来的参考,如果有人正在寻找一个类似的答案,继艾伦·摩尔的build议,我有以下工作正是我想要它…

 <?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> 

我设法find一些使用layout_weight其他例子,并决定将TextView高度设置为0dp ,并使用浮点数作为权重。 工作很好。 🙂

我想你想要的是设置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> 

使用Percent Supoort库中的PercentRelativeLayout或PercentFrameLayout

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

对于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)); 

看看这个:

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

你可以得到屏幕的高度,这是简单的math计算68%的屏幕。