사용 가능한 화면 너비의 절반에 선언적으로 너비 할당


113

사용 가능한 화면 너비의 절반에 위젯 너비를 할당 할 수 있으며 선언적 xml을 사용하여 수행 할 수 있습니까?

답변:


274

위젯이 버튼 인 경우 :

<LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal">
    <Button android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="somebutton"/>

    <TextView android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
</LinearLayout>

나는 당신이 당신의 위젯이 절반을 차지하고 다른 위젯이 다른 절반을 차지하기를 원한다고 가정하고 있습니다. 트릭은 LinearLayout을 사용하고 layout_width="fill_parent"두 위젯 모두 에서 설정 하고 두 위젯 layout_weight에서도 동일한 값으로 설정 하는 것입니다. 동일한 가중치를 가진 두 개의 위젯이있는 경우 LinearLayout은 두 위젯 사이의 너비를 분할합니다.


15
두 하위 요소에 대해 android : layout_width = "0dp"를 더 잘 사용하여 크기를 두 번 조정하지 마십시오.
tomash

2
왜 당신이 layout_width = "0dp"를 선언해야했는지 알지 못했습니다.
Andrew

Android 이후 버전에서 <Space />를 필러로 사용할 수도 있습니다. 필러로 사용하려는 경우 View가 TextView보다 약간 가볍다 고 생각합니다. layout_width = "0dp"는 실제로 Android 문서에 따라 권장되는 접근 방식입니다.
Muz

잘 작동합니다! 정말 고맙습니다!!
IcyFlame

1
@Andrew : 이렇게하면 레이아웃 렌더러가 구성 요소의 layout_width 작업을 시도하지 않기 때문에 가중치에 따라 추가 너비를 공유하는 것으로 바로 건너 뜁니다.
njzk2 2014

43

제약 레이아웃 사용

  1. 가이드 라인 추가
  2. 백분율을 50 %로 설정
  3. 가이드 라인과 부모에게보기를 제한하십시오.

여기에 이미지 설명 입력

백분율로 변경하는 데 문제가있는 경우이 답변 을 참조하십시오 .

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <android.support.constraint.Guideline
        android:id="@+id/guideline8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5"/>

    <TextView
        android:id="@+id/textView6"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/guideline8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    
</android.support.constraint.ConstraintLayout>

이것이 최선의 답이 될 것입니다.
Jean Eric

15

너비를 0dp로 지정하여 크기가 가중치에 따라 정확히 일치하는지 확인하면 자식 뷰의 콘텐츠가 커지더라도 정확히 절반으로 제한됩니다 (무게에 따라).

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

    <Button
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="click me"
    android:layout_weight="0.5"/>


    <TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Hello World"
    android:layout_weight="0.5"/>
  </LinearLayout>

1
나는 android : layout_width = "0dp"가 정확하다고 생각하지만 각 가중치를 0.5로 설정하고 weitghtSum을 합계로 설정할 필요가 없습니다. 두 자식 뷰에서 동일한 가중치를 가져야하는 것 같습니다.
jj_

5

화면의 절반을 채우는 중앙의 단일 항목에 대한 또 다른 방법 :

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

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:visibility="invisible" />

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2" />

       <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:visibility="invisible" />

</LinearLayout>

1
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/textD_Author"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Author : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
 <TextView
    android:id="@+id/textD_Tag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:text="Edition : "
    android:textColor="#0404B4"
    android:textSize="20sp" />
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:weightSum="1" >
    <Button
        android:id="@+id/btbEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Edit" />
    <Button
        android:id="@+id/btnDelete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.5"
        android:text="Delete" />
</LinearLayout>
</LinearLayout>

3
이 코드 스 니펫은 질문을 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 큰 도움이됩니다. 앞으로 독자를 위해 질문에 답하고 있으며, 해당 사용자는 코드 제안 이유를 모를 수 있습니다.
gunr2171 2015 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.