0

У меня есть сетка с (в настоящее время) четырьмя ячейками в ширину. Каждой ячейке я указываю ширину 20 пикселей. Я хочу разместить это в середине и в верхней части макета портрета. Мой код ниже. Моя проблема заключается в том, что сетка hte заполняет всю ширину, тогда как она хочет, чтобы она просто занимала только количество столбцов * ширину столбца. И для белого пространства вокруг него. Я поместил цвета на каждый из компонентов, чтобы попытаться понять, где они находятся. Два вида в первом LinearLayout никогда не отображаются. Ive пыталсяМакет динамической сетки посередине

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="@dimen/activity_vertical_margin" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      android:orientation="vertical" 
      tools:context=".EntryPointFragment"> 

<LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 

    <View 
      android:layout_width="wrap_content" 
      android:background="#FFFFFF00" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:layout_weight="1"/> 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/grid_view" 
       android:background="#FF000000" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:numColumns="4" 
       android:columnWidth="30dp" 
       android:verticalSpacing="1dp" 
       android:horizontalSpacing="1dp" 
       android:gravity="center"/> 

    <View 
      android:layout_width="wrap_content" 
      android:background="#FFFF00FF" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:layout_weight="1"/> 
</LinearLayout> 

<View 
     android:layout_width="match_parent" 
     android:background="#FF00FFFF" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     android:layout_weight="1"/> 

</LinearLayout> 

Это изображение показывает вид вещи, которую я хочу.

Может ли кто-нибудь помочь мне настроить этот xml? Количество столбцов и строк в сетке будет меняться, поэтому пространство вокруг него должно динамически изменяться.

Благодаря My Ideal Layout

+0

это выдержка? вам не хватает, по крайней мере, другого линейного макета в качестве родительского элемента для всех этих представлений (по вертикали) – user3802077

+0

вам не нужна гравитация (это влияет на содержимое представлений, а не на его расположение), представления, окружающие gridview, должны иметь высоту либо фиксированную, либо match_parent. Также ваш linearlayout должен использовать высоту полного экрана, так как это то, что вы хотите :) (match_parent) – user3802077

+0

Спасибо за ответы. Я обновил фрагмент кода сейчас. ive удалили гравюру и добавили LinearLayout. не уверен, что произошло с копией и вставкой. Извините – RNJ

ответ

1

Try:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:background="#ffff00"> 

     <View 
      android:layout_width="0dp" 
      android:background="#ff0000" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 

     <GridView 
      android:id="@+id/grid_view" 
      android:background="#ffffff" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:numColumns="4" 
      android:columnWidth="20dp" 
      android:verticalSpacing="1dp" 
      android:horizontalSpacing="1dp"/> 

     <View 
      android:layout_width="0dp" 
      android:background="#FFFF00FF" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 

    </LinearLayout> 

    <View 
     android:layout_width="match_parent" 
     android:background="#FF00FFFF" 
     android:layout_height="0dp" 
     android:layout_weight="3"/> 

</LinearLayout> 

вы получите что-то вроде этого:

Example of wanted layout

BTW: Вы можете изменить ширину/высоту вашего GridView, как вы пожелайте, вы можете поставить туда и вес с аналогичным подходом, как и для взглядов рядом с ним.

+0

Спасибо @Matcoil за ответ. Я хочу изменить динамику ширины и высоты в зависимости от данных, которые находятся в источнике данных. Я буду играть с layout_width/layout_height, чтобы узнать, могу ли я получить его так, как хочу. В идеале я хочу, чтобы ширина ячейки составляла 20 пикселей, а автоматически и автоматически вычислялась ширина и высота в зависимости от данных – RNJ

Смежные вопросы