Android Düzen Ağırlığı


84

Android geliştirmede yeniyim ve ağırlığı doğrusal bir düzende ayarlamakla ilgili bir sorum var.

İki özel düğme ve özel bir düzenleme metni içeren bir satır oluşturmaya çalışıyorum. Düzenleme metni yalnızca içeriği kadar yer kaplamalı ve satırdaki kullanılabilir alanın geri kalanını doldurmak için iki düğme yatay olarak genişlemelidir. Bunun gibi...

| [#Button++#] [#Button--#] [et] |

Birkaç denemeden sonra, aşırı karmaşık görünmesine rağmen, istediğime en yakın olanı bu.

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

Anladığım kadarıyla, düğmeleri tutan doğrusal düzenler için [android: layout_weight = "2"] ayarının onları düzenleme metninden daha fazla yer kaplaması gerekir, ancak benim için tam tersini yaparak ikisini de yarı boyutta yapar.

| [Btn] [Btn] [#####et#####] |

O kadar çok farklı kombinasyon denedim ki onları hatırlayamıyorum ve hiçbiri işe yaramadı.

Yanıtlar:


213

Genişlik olarak fill_parent kullandığınız için işe yaramıyor. Ağırlık, kalan boş alanı dağıtmak veya toplam toplam Doğrusal Düzenden daha büyük olduğunda alanı almak için kullanılır. Genişliklerinizi bunun yerine 0dip olarak ayarlayın ve çalışacaktır.


6
Doğrusal düzenlerde genişlikleri 0dip olarak ayarlamak istediğim gibi çalıştı. Bunun bir seçenek olduğunu bilmiyordum. Wrap_content'in çalışmadığı yerde bunun neden işe yarayacağı mantıklı. Genişliği içerik yokken wrap_content olarak ayarlamak onu yok eder, ancak 0dip olarak ayarlamak, yoktan olması gerektiği kadar genişlemesine izin verir. Çok teşekkür ederim.
UnluckyDevil

Layout_width değerini "fill_parent" olarak ve layout_weight'i "0.2", "0.85" vb. Gibi bir kayan değer olarak ayarlamak da işe yarar. Bu durumda, sayı ne kadar büyük olursa görünüm o kadar küçük olur. bunu yapmanın kabul edilebilir bir yolu olup olmadığını açıklar mısınız lütfen?
Yar

37
Bu benim için de çalıştı. Teşekkür ederim. (Söylemem gerekse de, android düzen sistemini garip ve
sezgisel bulan

Teşekkürler! Düzen genişliklerimin neden beklendiği gibi görünmediğini söylerken gerçekten sorun yaşadım. Bunu yapan 0dip ayarıydı :)
marlar

Kolay şeyler yapmak istiyorsanız @tstyle android kolaydır. Bununla birlikte , kolay şeylerden daha fazlasını yapmak istiyorsanız , aşırı zorlaşır.
Pacerier

14

android:Layout_weightZaten fill_parentvb. gibi genişliğinize sabit bir değer eklemediğinizde kullanılabilir .

Bunun gibi bir şey yapın:

<Button>

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

-----other parameters
</Button>

7

Böyle düşün, daha basit olacak

3 düğmeniz varsa ve ağırlıkları buna göre 1,3,1 ise, HTML'deki tablo gibi çalışacaktır.

Bu satır için 5 porsiyon sağlayın: Düğme 1 için 1 porsiyon, düğme 2 için 3 porsiyon ve düğme 1 için 1 porsiyon


3

LinearLayout'ta WeightSum = 2'yi ayarlayın;

Ve ağırlığı çocuklarına istediğiniz gibi dağıtın .. Çocuğa ağırlık = "1" verdim. Böylece ikisi de toplamın yarısını dağıtacak.

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>

2

ağırlık değerleri 0-1, ağırlık değeriyle orantılı olarak kullanılabilir alanın dağılımını (layout_width = "0px" ayarlandıktan sonra) paylaşır. Ağırlığı belirtilmemiş (ağırlık girişi yok) öğeleri görüntüleyin, ağırlık 0 alır, bu da genişleme almadıkları anlamına gelir.

Ağırlık girişi gerektirmeyen basit bir alternatif, metin için gereken minimum değerden (wrap_content) mevcut alana genişletilmesini söyleyen bir görünüme kayan çerçeve eklemektir EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"


0

EditTexts genişliğini olarak ayarlamayı wrap_contentve iki düğmeyi LinearLayoutgenişliği fill_parentve ağırlığı 1 olan bir düğmenin içine koymayı düşünürdüm .


0

Bulduğum bir neden daha (kulağa geldiği kadar belirsiz). Aşağıdakiler işe yaramadı.

LinearLayout dikey

LinearLayout yüksekliği dolgu saydam + ağırlık

LinearLayout yüksekliği dolgu saydam + ağırlık

LinearLayout yüksekliği dolgu saydam + ağırlık

EndLinearLayout

Ne işe yaradı

Göreli Düzen

LinearLayout dikey

LinearLayout yüksekliği dolgu saydam + ağırlık

LinearLayout yüksekliği dolgu saydam + ağırlık

LinearLayout yüksekliği dolgu saydam + ağırlık

EndLinearLayout

EndRelativeLayout

Doğrusal bir kök düzeni ile belirsiz görünüyor ve altındaki ağırlıklar işe yaramadı. Ve "işe yaramadı" dediğimde, çeşitli çözünürlükler arasındaki grafik düzeni görüntüledikten sonra ekran tutarlılığı büyük ölçüde bozuldu.


0
<LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="9"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
<EditText
        android:id="@+id/edittxt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
</LinearLayout>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.