mam prosty widok:marże android nie działa, gdy dynamicznie wstawiać widoki
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/contact_selected"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:orientation="horizontal"
android:padding="3dp">
<TextView
android:id="@+id/txt_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Billy Bob"
/>
</LinearLayout>
Kiedy statycznie skopiuj znaczników LinearLayout do mojego głównego układu działalności, marginesy są zgodnie z oczekiwaniami. Jednak po dynamicznym dodaniu widoku do głównego schematu działania marginesy są ignorowane. Oto jak wstawić pogląd
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.test, null);
TextView txt_title = (TextView)view.findViewById(R.id.txt_title);
txt_title.setText("DynamiC#1");
llayout.addView(view, llayout.getChildCount()-1);
View view2 = inflater.inflate(R.layout.test, null);
txt_title = (TextView)view2.findViewById(R.id.txt_title);
txt_title.setText("DynamiC#2");
llayout.addView(view2, llayout.getChildCount()-1);
Oto jak to wygląda:
Pojemnik w głównym układzie jest LinearLayout, który jest dzieckiem HorizontalScrollView. Wszelkie docenienia jest doceniane.
Dzięki, to jest czyste rozwiązanie i jest moim preferowanym sposobem na to. Dla każdego, kto uczy się tego, zwróć uwagę, że ponieważ inflate (view, parent) nadyma widok do rodzica (dodaje się jako ostatnie dziecko), wiersz w kodzie testowym, do którego dodaję widok (np. Llayout.addView()) spowoduje błąd, ponieważ widok został już wstawiony. W moim przypadku muszę zachować stały widok jako ostatnie dziecko i wstawić przed nim nowe dzieci. Dlatego usunąłem mój ostatni widok przed nadmuchaniem() i dodałem go ponownie po nadmuchaniu(). Działa jak marzenie. –
@JohnWard faktycznie nadal potrzebujesz addView, jeśli użyjesz "inflater.inflate (R.layout.test, linearLayout, false)" z tym ostatnim parametrem boolowskim. – Flyview