2013-09-28 12 views
22

hierarchia tak:Dodawanie LinearLayout programowo Android nie działa

  • RelativeLayout
    • LinearLayout (w pionie)
      • FrameLayout (waga 5)
        • ImageView
      • Widok (waga 1)

widok jest po prostu obojętne widok na rozstaw celowi. Zrobiłem to w układzie xml i to działa. Ale gdy chcę to zrobić programowo, następujące kody nie działają.

LinearLayout LL = new LinearLayout(this); 
ImageView ladder = new ImageView(this); 
FrameLayout ladderFL = new FrameLayout(this); 
View dummyView = new View(this); 
ladder.setImageResource(R.drawable.ladder1); 
LL.setOrientation(LinearLayout.VERTICAL); 
LayoutParams LLParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); 
LinearLayout.LayoutParams ladderFLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 0); 
ladderFLParams.weight = 5f; 
LinearLayout.LayoutParams dummyParams = new LinearLayout.LayoutParams(0,0); 
dummyParams.weight = 1f; 

FrameLayout.LayoutParams ladderParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); 
ladder.setLayoutParams(ladderParams); 
ladderFL.setLayoutParams(ladderFLParams); 
dummyView.setLayoutParams(dummyParams); 
LL.setWeightSum(6f); 
LL.setLayoutParams(LLParams); 

ladderFL.addView(ladder); 
LL.addView(ladderFL); 
LL.addView(dummyView); 
((RelativeLayout) findViewById(R.id.screenRL)).addView(LL); 

Odpowiedz

58
LinearLayout LL = new LinearLayout(this); 
    LL.setBackgroundColor(Color.CYAN); 
    LL.setOrientation(LinearLayout.VERTICAL); 

    LayoutParams LLParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); 

    LL.setWeightSum(6f); 
    LL.setLayoutParams(LLParams); 


    ImageView ladder = new ImageView(this); 
    ladder.setImageResource(R.drawable.ic_launcher); 

    FrameLayout.LayoutParams ladderParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); 
    ladder.setLayoutParams(ladderParams); 

    FrameLayout ladderFL = new FrameLayout(this); 
    LinearLayout.LayoutParams ladderFLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 0); 
    ladderFLParams.weight = 5f; 
    ladderFL.setLayoutParams(ladderFLParams);  
    ladderFL.setBackgroundColor(Color.GREEN); 
    View dummyView = new View(this); 

    LinearLayout.LayoutParams dummyParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0); 
    dummyParams.weight = 1f; 
    dummyView.setLayoutParams(dummyParams); 
    dummyView.setBackgroundColor(Color.RED); 



    ladderFL.addView(ladder); 
    LL.addView(ladderFL); 
    LL.addView(dummyView); 
    RelativeLayout rl=((RelativeLayout) findViewById(R.id.screenRL)); 
    rl.addView(LL); 

Właśnie umieszczony kod do lepszego zrozumienia, także dał mu kolor tła, aby uzyskać jasny obraz tego, jak nie wiem, co chcesz, możesz przejść przez niego. Mam nadzieję, że to jest pomocne. Powinieneś podać swój pracujący xml, abyśmy dokładnie wiedzieli, czego chcesz.

+0

Nie wiem, dlaczego twoje kody działają, mimo że usunąłem te kolory. Może jest problem z moim rozmieszczeniem kodów. W każdym razie, dzięki! – Tommy

+1

@Piyush Gupta: Co oznacza screenRL? –

Powiązane problemy