가로 LinearLayout의 오른쪽 맞춤 버튼


130

첨부 된 이미지를 보면 버튼을 올바르게 정렬해야하지만 어떤 이유로 'gravity : right'와 함께 작동하지 않습니다 ...

추가 취소

해당 레이아웃에 대한 내 코드는 다음과 같습니다.

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>

왜 작동하지 않습니까?!


6
이 경우 상대 레이아웃을 사용해보십시오. LL이 작동하지
않음

4
LinearLayout을 사용하려면 두 개의 내부 linearlayout을 사용하고 layout_weight와 함께 layout_weight를 사용하십시오. 잘 작동합니다.
Vamsi Challa

@VamsiChalla 하나만 가능합니다. 아래 새 답변을 확인하십시오.
TWiStErRob

답변:


137

아래 코드를 사용하십시오.

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="9dp"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:textSize="20sp" />

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

</RelativeLayout>

3
이 경우 버튼에 'layout_alignParentRight'속성을 사용할 수없는 것 같습니다. 더 이상 사용되지 않습니까?

20
linearlayout 대신 relativelayout을 사용하고 있습니까?
Dipak Keshariya

1
아 헛소리 .. 미안하지만, 나는 그것을 완전히 지나쳐 보았다. 감사!

4
선형 레이아웃을 사용하려고 시도하는 것이 너무 쉬운 것처럼 보이는 것이 여전히 놀랍습니다.
AlvaroSantisteban

2
향후 시청자를위한 @DipakKeshariya, "android : layout_gravity ="top | right "linearlayout
SupimpaAllTheWay

145

단일 LinearLayout솔루션. 간단한 간격보기 만 추가하십시오
.

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cancel"
        android:textColor="#404040"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"
        android:layout_marginTop="9dp" />

    <!-------------------------  ADDED SPACER VIEW -------------------->
    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <!------------------------- /ADDED SPACER VIEW -------------------->

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />

</LinearLayout>

"강조 표시된"보기에 유의하십시오. 다른 사항은 수정하지 않았습니다. 높이가 0이면 보이지 않습니다. 너비 = 0은 너비 LinearLayout= 1을 기준으로 너비를 결정하기 때문 입니다. 이것은 스페이서 뷰가 방향 (방향)으로 가능한 한 많이 늘어나는 것을 의미합니다 LinearLayout.

참고 사용한다 android.widget.Space또는 android.support.v4.widget.Space대신View 하여 API 레벨 및 / 또는 의존성이 그것을 허용하는 경우. Space측정하는 것만으로는하지 않고, 더 싼 방법으로 작업을 View수행합니다. 또한 의도를보다 표현 적으로 전달합니다.


2
R.id.lblExpenseCancel에 android : layout_weight = "1"을 추가하기 만하면됩니다.
hrules6872

1
@h_rules는 해킹하려는 경우 작동하지만 TextView에 배경을 추가하면 어떤 일이 발생하는지 상상해보십시오.
TWiStErRob

2
왜이 답변이 다운 투표를 받았는지 궁금합니다. 작동하고 훌륭합니다. 확실히 시도 할 것입니다.
Elvedin Hamzagic

모바일 개발자로서 완벽합니다
Shivanand Darur

스페이서를 추가하면 화면 크기가 다르면 결과가 다릅니다. 따라서 이상적인 솔루션은 아닙니다.
GeoMint


28

이 질문은 얼마 전에 요청 된 것을 알고 있지만 이전에이 작업을 수행했으며 항목을 정렬 할 때 더 많은 제어가 가능합니다. 웹 프로그래밍처럼 보이면 도움이됩니다. 당신 LinearLayout은 그 안에 버튼을 포함 할 다른 것을 중첩 시킵니다. 그런 다음 버튼 레이아웃의 중력을 변경하고 오른쪽에있는 동안TextView 가 여전히 왼쪽에있는 있습니다.

이 코드를 사용해보십시오 :

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cancel" 
    android:textColor="#404040"         
    android:layout_marginLeft="10dp" 
    android:textSize="20sp" 
    android:layout_marginTop="9dp"/>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>

중첩 된 레이아웃에서 패딩을 사용하여 원하는 방식으로 작동해야 할 수도 있습니다.


2
중첩 레이아웃에 FrameLayout을 사용해야합니다. 하나의 단일 요소를 배치하는 것이 목적입니다. 또한 무게를 주어 부모의 오른쪽 부분을 채 웁니다. 어쨌든 상대 레이아웃을 사용하지 않으면 +1입니다.
Hjalmar

10

이거 한번 해봐

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_gravity="right" 
    android:layout_height="wrap_content"             
    android:orientation="horizontal"  >

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="9dp"
    android:text="cancel"
    android:textColor="#ffff0000"
    android:textSize="20sp" />

<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:textColor="#ff0000ff"
    android:text="add" />

 </RelativeLayout>
  </LinearLayout>

9

몇 번 전에 언급했듯이 LinearLayout에서 RelativeLayout으로 전환하면 작동하지만 문제를 피하는 대신 해결할 수도 있습니다. LinearLayout이 제공하는 도구를 사용하십시오. TextView에 weight = 1 (아래 코드 참조)을 지정하십시오. 단추의 가중치는 0으로 유지되거나 없어야합니다. 이 경우 TextView는 나머지 공간을 모두 차지하므로 TextView 또는 ButtonView의 내용을 표시하는 데 사용되지 않고 버튼을 오른쪽으로 밉니다.

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

        <TextView
            android:id="@+id/lblExpenseCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cancel"
            android:textColor="#404040"
            android:layout_marginLeft="10dp"
            android:textSize="20sp"
            android:layout_marginTop="9dp"

            **android:layout_weight="1"**

            />

        <Button
            android:id="@+id/btnAddExpense"
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:background="@drawable/stitch_button"
            android:layout_marginLeft="10dp"
            android:text="@string/add"
            android:layout_gravity="right"
            android:layout_marginRight="15dp" />

    </LinearLayout>

2
이것이 가장 좋은 대답입니다. 나는 당신의 게시물을 찾을 때까지 비슷한 것을 쓰고 싶었습니다.
codingdave

더 많은 메모리를 소비 하기 RelativeLayout때문에 메모리 문제로 전환하는 것보다 낫습니다.RelativeLayoutLinearLayout
ThunderWiring

7

버튼이 아닌 레이아웃에 중력을 추가해야합니다. 버튼 설정의 중력은 버튼 내부의 텍스트입니다

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

2
그렇다면 TextView도 올바르게 정렬하지 않습니까? 난 그냥 오른쪽 정렬 버튼이 필요합니다 ...

1
버튼 만 정렬해야하는 경우 RelativeLayout을 사용하십시오.
goodm

1
모든 버튼을 정렬하더라도 작동하지 않습니다 (API 16). 어린이 뷰는 여전히 왼쪽에 정렬됩니다.
m0skit0

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

    <TextView
        android:id="@+id/lblExpenseCancel"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:text="@string/cancel" 
        android:textColor="#404040"         
        android:layout_marginLeft="10dp" 
        android:textSize="20sp" 
        android:layout_marginTop="9dp"/>              

    <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="wrap_content"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"                    
        android:text="@string/add" 
        android:layout_gravity="right" 
        android:layout_marginRight="15dp"/>

</LinearLayout>

이것은 당신의 문제를 해결할 것입니다


3

RelativeLayout을 사용하지 않거나 사용할 수없는 경우 방향을 "수직"및 너비를 "fill_parent"로하여 LinearLayout에서 단추를 줄 바꿈 할 수 있습니다.

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

  <TextView
      android:id="@+id/lblExpenseCancel"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/cancel"
      android:textColor="#404040"
      android:layout_marginLeft="10dp"
      android:textSize="20sp"
      android:layout_marginTop="9dp" />

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
     <Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:background="@drawable/stitch_button"
        android:layout_marginLeft="10dp"
        android:text="@string/add"
        android:layout_gravity="right"
        android:layout_marginRight="15dp" />
  </LinearLayout>
</LinearLayout> 

LinearLayout의 방향이 수평이면 중력은 뷰에만 수직으로 영향을 미치기 때문입니다. 방향이 '수직'인 경우, 중력은 뷰에 수평으로 만 영향을줍니다. LinearLayout 방향 / 중력 설명에 대한 자세한 내용 은 여기 를 참조 하십시오 .


2

그냥 추가 안드로이드 : 중력 = "오른쪽" 이 라인의 부모는이 의지 작업을 레이아웃.

<LinearLayout
        android:id="@+id/withdrawbuttonContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorPrimary"
        android:orientation="horizontal"
        **android:gravity="right"**
        android:weightSum="5"
        android:visibility="visible">

        <Button
            android:id="@+id/bt_withDraw"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_ADD"
            app:delay="1500" />

        <Button
            android:id="@+id/btn_orderdetail_amend"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/BTN_CANCEL"
            app:delay="1500" />
</LinearLayout>

0

4 TextView초 와 비슷한 레이아웃을 사용했습니다 . 2 개 TextView는 왼쪽에 정렬하고 2 개 TextView는 오른쪽에 정렬해야합니다. LinearLayouts혼자서 사용하고 싶다면 여기 내 해결책이 있습니다 .

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:padding="10dp" >

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="left"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/level"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_level_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="match_parent"
        android:gravity="right"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/time"
            android:textAppearance="?android:attr/textAppearanceMedium"
             />

        <TextView
            android:id="@+id/textview_fragment_mtfstatus_time_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textAppearance="?android:attr/textAppearanceMedium" 
            />
    </LinearLayout>

</LinearLayout>

0

RelativeLayout을 사용하거나 Button의 부모 레이아웃에서 gravity = "right"를 설정할 수 있습니다.


0

나는 이것이 오래된 것을 알고 있지만 선형 레이아웃의 또 다른 것은 다음과 같습니다.

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

<TextView
    android:id="@+id/lblExpenseCancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/cancel"
    android:textColor="#404040"
    android:layout_marginLeft="10dp"
    android:textSize="20sp"
    android:layout_marginTop="9dp" />

<Button
    android:id="@+id/btnAddExpense"
    android:layout_width="wrap_content"
    android:layout_height="45dp"
    android:background="@drawable/stitch_button"
    android:layout_marginLeft="10dp"
    android:text="@string/add"
    android:layout_gravity="center_vertical|bottom|right|top"
    android:layout_marginRight="15dp" />

중력이 아닌 layout_gravity에 유의하십시오.


무슨 일이야 center_vertical|bottom|top? 그들은 나에게 독점적 인 정렬 중력처럼 보입니다.
TWiStErRob

0

기본 레이아웃으로 Linearlayout 대신 Relativelayout을 사용해야합니다. Relativelayout을 기본으로 사용하는 경우 상대 레이아웃이 alignParent 오른쪽, 왼쪽, 위쪽 및 아래쪽을 제공하므로 오른쪽의 버튼을 쉽게 처리하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.