2015-04-30 2 views
0

Я использую студию Android для создания приборной панели. Теперь я столкнулся с проблемой, что у меня есть линейная компоновка, где я хочу две кнопки в каждой строке, одну кнопку слева и другую справа от экрана. Мой XML выглядит так:как выровнять элементы управления в линейной компоновке android

<LinearLayout style="@style/ActivityBody" 
      android:orientation="vertical" 


      > 

    <LinearLayout android:orientation="horizontal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="60dip" 
       android:layout_gravity="left" 
       android:layout_marginLeft="20dp" 
       > 

       <Button 
        android:id="@+id/btnMaterialIssue" 
        style="@style/DashboardButton" 
        android:drawableTop="@drawable/materialissue" 
        android:text="Material Issue" 
        android:onClick="onGol" 

        android:layout_gravity="left" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 

       <Button 
        android:id="@+id/btnWorkCompletion" 
        style="@style/DashboardButton" 
        android:drawableTop="@drawable/workcompletion" 
        android:text="Work Completion" 
        android:onClick="onGol" 
        android:layout_gravity="right" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
      </LinearLayout> 


</LinearLayout> 

Мой файл стиля, как это:

<?xml version="1.0" encoding="utf-8"?> 

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
    </style> 
    <style name="Theme" parent="android:Theme"></style> 

     <style name="Theme.D1t" parent="android:style/Theme.Light"> 
     <item name="android:windowNoTitle">false</item> 
     <item name="android:windowContentOverlay">@null</item> 
    </style> 
    <style name="Theme.D1" parent="android:style/Theme.Light"> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowContentOverlay">@null</item> 
    </style> 
    <style name="Theme.tranlucent" parent="android:style/Theme.Translucent"> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowContentOverlay">@null</item> 
    </style> 

    <style name="Home"> 
     <item name="android:layout_gravity">center_vertical</item> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_weight">0</item> 
     <item name="android:background">#fff</item> 
    </style> 

    <style name="HomeText"> 
     <item name="android:layout_gravity">center_vertical</item> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:layout_weight">0</item> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:textSize"> 18sp</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textColor">@color/foreground</item> 
    </style> 

    <style name="TitleBar"> 
     <item name="android:id">@id/title_container</item> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">45dip</item> 
     <item name="android:orientation">horizontal</item> 
     <item name="android:background">@color/title_background</item> 
    </style> 

    <style name="TitleBarOperation"> 
     <item name="android:layout_width">45dip</item> 
     <item name="android:layout_height">fill_parent</item> 
    </style> 

    <style name="TitleBarLogo"> 
     <item name="android:id">@id/title_logo</item> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">fill_parent</item> 
    </style> 

    <style name="TitleBarText"> 
     <item name="android:id">@id/title_text</item> 
     <item name="android:layout_width">0dp</item> 
     <item name="android:layout_height">fill_parent</item> 
     <item name="android:layout_weight">1</item> 
     <item name="android:gravity">center_vertical</item> 
     <item name="android:textSize">18sp</item> 
     <item name="android:paddingLeft">12dip</item> 
     <item name="android:paddingRight">12dip</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textColor">@color/title_text</item> 
     <item name="android:singleLine">true</item> 
     <item name="android:ellipsize">end</item> 
    </style> 

    <style name="TextBody"> 
     <item name="android:textSize">15sp</item> 
     <item name="android:lineSpacingMultiplier">1.1</item> 
     <item name="android:textColor">@color/textBody</item> 
     <item name="android:textStyle">bold</item> 
    </style> 

    <style name="ActivityBody"> 
     <item name="android:layout_width">fill_parent</item> 
     <item name="android:layout_height">wrap_content</item> 

    </style> 
    <style name="DashboardButton"> 
     <item name="android:layout_gravity">center_vertical</item> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:drawablePadding">2dp</item> 
     <item name="android:textSize">9dp</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textColor">#fff</item> 
     <item name="android:background">@null</item> 
    </style> 
</resources 
+0

Лучше использовать RelativeLayout. И избавиться от корневого макета, который просто ** бесполезен **. –

+1

использовать макет вес – Mikel

ответ

1

вы должны использовать android:layout_weight использовать layout_weight вы хотите установить layout_width в "0dp"

android:layout_width="0dp" 
android:layout_weight="1" 


<LinearLayout android:orientation="horizontal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="60dip" 
       android:layout_gravity="left" 
       android:layout_marginLeft="20dp" 
       > 

       <Button 
        android:id="@+id/btnMaterialIssue" 
        style="@style/DashboardButton" 
        android:drawableTop="@drawable/materialissue" 
        android:text="Material Issue" 
        android:onClick="onGol" 
        android:layout_width="0dp" 
        android:layout_weight="1" 
        android:layout_height="wrap_content" /> 

       <Button 
        android:id="@+id/btnWorkCompletion" 
        style="@style/DashboardButton" 
        android:drawableTop="@drawable/workcompletion" 
        android:text="Work Completion" 
        android:onClick="onGol" 
        android:layout_width="0dp" 
        android:layout_weight="1" 
        android:layout_height="wrap_content" /> 
      </LinearLayout> 
+1

Ширина должна быть 0dp и btnWorkCompletion имеет две layout_width. Можете ли вы отредактировать это, пожалуйста? Для следующего человека, который увидит этот ответ. – Hein

+0

@hero Спасибо, я отредактировал свой ответ. – kosala

+1

thx sudo ... только с использованием веса работал для меня. – killer

1

, что вы можете сделать, это использовать относительное расположение и выровнять их влево и вправо

ниже код

<RelativeLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="60dip" 
    android:layout_gravity="left" 
    android:layout_marginLeft="20dp"> 

    <Button 
     android:id="@+id/btnMaterialIssue" 
     style="@style/DashboardButton" 
     android:drawableTop="@drawable/materialissue" 
     android:text="Material Issue" 
     android:onClick="onGol" 
     android:layout_alignParentRight="true" 
     android:layout_gravity="left" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/btnWorkCompletion" 
     android:layout_alignParentLeft="true" 
     style="@style/DashboardButton" 
     android:drawableTop="@drawable/workcompletion" 
     android:text="Work Completion" 
     android:onClick="onGol" 
     android:layout_gravity="right" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 
1
  1. Опция: Используйте поля слева от правой кнопки и справа от левой кнопки.

      <LinearLayout android:orientation="horizontal" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_marginTop="60dip" 
          android:layout_gravity="left" 
          android:layout_marginLeft="20dp" 
          > 
    
          <Button 
           android:id="@+id/btnMaterialIssue" 
           style="@style/DashboardButton" 
           android:drawableTop="@drawable/materialissue" 
           android:text="Material Issue" 
           android:onClick="onGol" 
    
           layout_marginRight="20dp" 
    
           android:layout_gravity="left" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" /> 
    
          <Button 
           android:id="@+id/btnWorkCompletion" 
           style="@style/DashboardButton" 
           android:drawableTop="@drawable/workcompletion" 
           android:text="Work Completion" 
           android:onClick="onGol" 
    
           layout_marginLeft="20dp" 
    
           android:layout_gravity="right" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" /> 
         </LinearLayout> 
    
  2. Опция: место что-то (другой вид (LinearLayout)) в середине, между кнопками.

  3. Опция: Попробуйте играть с layout_weight

    <Button 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="New Button" 
        android:layout_weight="1"/> 
    <LinearLayout 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" android:layout_weight="1"> 
    </LinearLayout> 
    <Button 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="New Button" 
        android:layout_weight="1"/> 
    </LinearLayout> 
    
+0

, но я хочу, чтобы он был совместим со всеми размерами экрана, поэтому я не хочу использовать постоянное значение в полях. Я хочу использовать маржу в соответствии с размерами экрана, так же как% в веб-приложениях. – killer

+0

ОК затем поместите линейную паузу в середине кнопок, чем дать им layout_weight ... –

-1

Добавить все linearlayout в relativelayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="35dp" 
    android:orientation="horizontal" > 

И в LinearLayout или кнопку добавить android:layout_alignParentRight="true"

<Button 
     android:id="@+id/btnAddExpense" 
     android:layout_width="wrap_content" 
     android:layout_height="45dp" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="15dp" 
     android:background="@drawable/stitch_button" 
     android:text="@string/add" /> 
Смежные вопросы