Drawni Android: Określanie szerokości rysunku w procentach w pliku XML?


Próbuję stworzyć prosty obiekt rysunkowy, który chcę ustawić jako tło do prezentacji (użycie

setBackgroundDrawable
) Chcę tylko podzielić tło rysowanego obiektu na 2 równych prostokątach (50% - 50%), z których pierwsza musi być wypełniona czarnym, drugim białym:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="[url=http://schemas.android.com/apk/res/android">]http://schemas.android.com/apk ... gt%3B[/url]
<item android:id="@+id/back_color_1">
<shape android:shape="rectangle">
<solid android:color="#000000"/>
</shape>
</item>
<item android:id="@+id/back_color_2">
<shape android:shape="rectangle">
<solid android:color="#FFFFFF"/>
</shape>
</item>
</layer-list>

Jak mogę wskazać, że każda liczba powinna mieć szerokość 50% w pliku definicji XML w szafy? Raczej

android:width="50%"

.
(Pracuję na Androidzie 3.0, ale myślę, że jest to ogólne pytanie Android.)
P.S: możesz to zrobić w CSS lub XAML.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Nie możesz określić procentu
. Musisz określić wartość pomiarową.
Android: Szerokość Otoczony tutaj:

http:// Developer.Android.com/Link/Android/R.ATTR.HTML # Szerokość
http://developer.android.com/r ... width
:
(Kopalnia ialię)


Musi istnieć wartość pomiarowa
, czyli liczba zmiennoprzecinkowa dołączana do jednostki, na przykład „14,5sp”. Dostępne jednostki: px (piksele), dp (piksele niezależne od gęstości), sp (piksele skalowane w oparciu o preferowany rozmiar czcionki), w (cale), mm (milimetry).

Aby zapoznać się z definicją każdego typu pomiaru, zobacz:

http://developer.android.com/g ... nsion
http://developer.android.com/g ... nsion
Musisz utworzyć własny atrybut (patrz.

styleable
http://developer.android.com/r ... e.html) i wykonaj obliczenia samodzielnie w
onDraw (...)
.

Zobacz te dwa pytania i zawarte w nich linki, aby zapoznać się z przykładami

:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

nie ma tutaj prawdziwego ustawienia procentowego, ale możesz podejść blisko.
Wydaje się, że najprostszy sposób osiągnięcia tego jest użycie obrazu jako tła rysunku i po prostu zrobić czarno-biały obraz podziału.
Jedynym innym sposobem, w jaki wiem, jest podzielenie czegokolwiek - ma używać 2 widoków, każdy z własnym kolorem BG i każdej i tej samej wartości dodatniej dla atrybutu Android: Layout_Weight (I. 50/50). Następnie oddzielą dostępną przestrzeń.
mam nadzieję że to pomoże!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

android: layout_weight = ".20" to najlepszy sposób na zaimplementowanie wartości procentowej

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[url=http://schemas.android.com/apk/res/android"]http://schemas.android.com/apk/res/android"[/url]
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/logTextBox"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=".20"
android:maxLines="500"
android:scrollbars="vertical"
android:singleLine="false"
android:text="@string/logText" >
</TextView></LinearLayout>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Znalazłem sposób, aby to zrobić, tworząc własną klasę dziedziczącą po RelativeLayout, gdzie zastępuję metodę onMeasure. W tym momencie wysokość widoku jest znana, więc wyodrębniłem tło i ręcznie ustawiłem wstawianie elementów za pomocą

setLayerInset
http://developer.android.com/r ... 28int,%20int,%20int,%20int,%20int%29
.
LayerDrawable bg = (LayerDrawable)getBackground();
int h = getMeasuredHeight();
bg.setLayerInset(1, 0, 0, 0, h/2);

Jednak ta metoda jest trochę kłopotnicza. W większości przypadków odpowiedź dostarczona przez Chrisa powinna wystarczyć.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najlepszy sposób, jak powiedział Svapnil, jest użycie Layout_weight w linearlayout.
Jeśli idziesz w poziomie, ustaw layout_width na „fill_parent”, a następnie ustaw layout_weight na żądaną wartość procentową. Zacznij od czegoś podobnego do poniższego i baw się z wartościami layout_width, aby się zorientować (lub dodaj więcej widoków tylko dla lepszego zrozumienia).
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation = "horizontal" > <View
android:layout_width="fill_parent"
android:layout_height="30dip"
android:layout_weight="0.5"
android:background="#aaffaa"/>
<View
android:layout_width="fill_parent"
android:layout_height="30dip"
android:layout_weight="0.5"
android:background="#aaaaff"/>
</LinearLayout>

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się