Próbuję zagnieździć RelativeLayout
wewnątrz LinearLayout
i nadać RelativeLayout
margines, który oddziela krawędzie od krawędzi LinearLayout
. Do tej pory mam to:Układ względny ignorujący setMargin()
LayoutInflater.from(context).inflate(R.layout.conversation_view_layout, this, true);
this.setLayoutParams(new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
int tbm = AllConversationsActivity.topAndBottomMargin;
int lrm = AllConversationsActivity.leftAndRightMargin;
((MarginLayoutParams) this.getLayoutParams()).setMargins(lrm, tbm, lrm, tbm);
this.requestLayout();
Co, jeśli mam poprawnie czyta API, należy ustawić margines RelativeLayout do określonych numerów. Wcale tak nie jest, ale zamiast tego po prostu ignoruje całkowicie setMargins()
.
Również tutaj moja xml
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/conversation_picture"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>
<TextView
android:id="@+id/conversation_person"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/conversation_picture"
android:singleLine="true"
android:ellipsize="marquee"/>
<TextView
android:id="@+id/conversation_length"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"/>
<TextView
android:id="@+id/conversation_first_line"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/conversation_picture"
android:layout_alignParentLeft="true"
android:singleLine="true"
android:ellipsize="end"/>
<TextView
android:id="@+id/conversation_last_time"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/conversation_first_line"
android:layout_alignParentLeft="true"
android:singleLine="true"
android:ellipsize="marquee"/>
mam małe podejrzenia, że te poglądy są zmuszając RelativeLayout
krawędzi do krawędzi dominujących kiedy oni swoje połączenia wyrównania. Czy ktoś wie, co należy zrobić, aby ustawić te marginesy? A może istnieje lepszy sposób na zrobienie tego w całości? Doceniony.
Gdyby to był problem, otrzymałby wyjątek od klasy. MarginLayoutParams to super klasa LinearLayout.LayoutParams, RelativeLayout.LayoutParams i tak dalej. Poza tym, co robi program setLayoutParams(), to utrzymywanie parametrów w polu składowym i wywoływanie requestLayout(), tak więc powinno zadziałać tylko jedno z tych wywołań (requestLayout() lub setLayoutParams(), ale nie oba razem) – asenovm
Entreco, odwróciłeś się Dokładnie tak, ponieważ tworzyłem niewłaściwego właściciela paramów, ale implementacja, którą wprowadziłeś, była trochę zła. Oto kod, który zakończył się pracuje: 'LinearLayout.LayoutParams params = new LinearLayout.LayoutParams ( \t \t \t \t LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); \t \t int tbm = AllConversationsActivity.topAndBottomMargin; \t \t int lrm = AllConversationsActivity.leftAndRightMargin; \t params.setMargins (tbm, lrm, tbm, lrm); \t setLayoutParams (params); \t \t requestLayout(); ' Dzięki za pomoc! – blaineh
to nie działa dla mnie. Próbowałem tego w moim rozszerzonym konstruktorze LinearLayout. Marginesy nie pojawiają się wcale, bez względu na to, jakie wymiary dostarczam. Co może być nie tak? – faizal