我需要一个盒子里的盒子,第一个盒子顶部约有33%的空房间,然后是另一个盒子。我需要它集中在一起。我想在移动电话上基本上fill_parent
,但在平板电脑(此应用程序的主要设备)上,它应该保持相同的大小,但是在屏幕中间居中。我怎么能这样做?
我包括了一些例子,因为我有点难以解释。
移动
|---------------------------|
| ~33% Blank space |
| |
| |---------------------| |
| | | |
| | | |
| | Login Box | |
| | Password | |
| | | |
| | | |
| | | |
| | | |
| | | |
| |---------------------| |
|---------------------------|
平板
|---------------------------------------|
| ~33% Blank space |
| |
| |---------------------| |
| | | |
| | | |
| | Login Box | |
| | Password | |
| | | |
| | | |
| | | |
| | | |
| | | |
| |---------------------| |
|---------------------------------------|
编辑以下是我目前拥有的XML。我没有得到智能感知(我通常得到建议),而且我得到了一个具有多个布局的强制转换异常。 XML有问题吗?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1"
>
<LinearLayout android:id="@+id/topSpacer"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=".33"
android:orientation="horizontal"
></LinearLayout>
<LinearLayout
android:id="@+id/bottomSection"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=".67"
android:orientation="horizontal"
>
<LinearLayout
android:id="@+id/loginSection"
android:layout_width="320dip"
android:layout_height="fill_parent"
android:background="#FFFFFF"
>
<TextView
android:text=""
android:id="@+id/errorMessage"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
<TextView
android:text="Please login using your active directory credentials."
android:id="@+id/loginMessage"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
<AutoCompleteTextView
android:id="@+id/loginUsername"
android:text="Username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/loginPassword"
android:text="Password"
android:password="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/loginButton"
android:text="Login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="results"
android:id="@+id/resultsMessage"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:1)
尝试使用weightSum
属性的线性布局组合。另请注意,内盒的宽度是固定的,就像您在平板电脑上提到的那样,您不希望它重新调整尺寸。
试试这个:
* 编辑:我使用相对布局来使内框居中*
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1">
<LinearLayout android:id="@+id/thirtyThreePercentSpacer"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:layout_height="0dp"
android:layout_weight=".33">
</LinearLayout>
<RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
android:layout_height="0dp"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight=".67">
<LinearLayout android:id="@+id/innerBox"
android:layout_width="320dip"
android:layout_height="fill_parent"
android:layout_centerInParent="true">
</LinearLayout>
</RelativeLayout>
</LinearLayout>
答案 1 :(得分:1)
您可以为智能手机和平板电脑使用不同的布局。
将它放在layout
文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<LinearLayout
android:layout_width="200dp"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="2"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="login box"/>
</LinearLayout>
</LinearLayout>
对于平板电脑,您可以在layout-large
下使用类似的内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<LinearLayout
android:layout_width="200dp"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="2"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="login box"/>
</LinearLayout>
</LinearLayout>
在这种情况下,您应该根据需要调整登录框的宽度。
也许你可以使用相同的布局做一些事情,但一般来说这些设备类的布局会有很大不同。为了改善这一点,您可以设计一次登录框,并从这些布局include
设计它(参见http://developer.android.com/resources/articles/layout-tricks-reuse.html)。