Android центрированное внутреннее расположение - PullRequest
0 голосов
/ 28 октября 2011

Мне нужен ящик внутри ящика с ~ 33% пустого пространства вверху первого ящика, а затем еще один ящик под ним.Мне нужно, чтобы это было в центре.Я хотел бы, чтобы это было по существу fill_parent на мобильном телефоне, но на планшете (основное устройство для этого приложения) он должен оставаться того же размера, но быть в центре экрана.Как я могу это сделать?

Я привожу примеры, так как мне немного сложно объяснить. Планшет

|---------------------------------------|
|           ~33% Blank space            |
|                                       |
|        |---------------------|        |
|        |                     |        |
|        |                     |        |
|        |      Login Box      |        |
|        |      Password       |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |                     |        |
|        |---------------------|        |
|---------------------------------------| 

Редактировать Вот XML, который у меня сейчас есть.Я не получаю intellisense для чего-либо, (я обычно получаю предложения), и я получаю исключение приведения с несколькими макетами.Что-то не так с 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>

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Вы можете использовать разные макеты для смартфонов и планшетов.

Поместите это в папку 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).

1 голос
/ 28 октября 2011

Попробуйте комбинацию линейных макетов, использующих свойство 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...