2017-01-30 9 views
0

Es gibt einen Unterschied, wenn ich programmatisch RelativeLayout hinzufügen und wenn ich direkt XML-Ansicht verwenden.Unterschiede zwischen Ansicht erstellen mit XML - Ansicht erstellen mit Code

Wenn ich mehrere RelativeLayout in container_tabs kopieren und einfügen es funktioniert ..

Und wenn ich versuche, eine relativeLayout Datei (genau gleich wie in container_tabs) aufzublasen das Ergebnis anders ist und es nicht funktioniert.

Wie fülle ich meine Ansicht programmatisch

@BindView(R.id.container_tabs) 
    protected LinearLayout mLinearLayoutContainerTabs; 

    private List<CustomBookingTab> mBookingTabsList = new ArrayList<>(); 

    private void initCustomButtonsTabs() { 
     mBookingTabsList.add(new CustomBookingTab(this, EnumBookingTab.BOOKING_TAB_CALENDAR, R.drawable.ic_calendar_white)); 
     mBookingTabsList.add(new CustomBookingTab(this, EnumBookingTab.BOOKING_TAB_TIME, R.drawable.ic_clock)); 


     for (int i = 0; i < mBookingTabsList.size(); i++) { 
      mLinearLayoutContainerTabs.addView(mBookingTabsList.get(i).getRelativeLayoutBookingTab(), i); 
     } 
    } 

Wie ich meine Ansicht aus einer XML-Datei (CustomBookingTab Konstruktor)

mRelativeLayoutBookingTab = (RelativeLayout) inflater.inflate(R.layout.booking_tab, null); 

Hauptansicht

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="-29dp" 
     android:orientation="horizontal"> 

     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:orientation="horizontal"> 

      <LinearLayout 
       android:id="@+id/container_tabs" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center" 
       android:gravity="center" 
       android:orientation="horizontal"> 

       <!-- Tab item --> 
       <RelativeLayout 
        android:layout_width="0dp" 
        android:layout_height="70dp" 
        android:layout_gravity="center" 
        android:layout_weight="1"> 

        <FrameLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content"> 

         <ImageView 
          android:layout_width="70dp" 
          android:layout_height="70dp" 
          android:layout_alignParentLeft="true" 
          android:background="@drawable/circle_blue_button_border_white" 
          android:padding="21dp" 
          android:src="@drawable/ic_calendar_white" 
          android:text="Button" 
          android:textColor="#FFFFFF" 
          android:textSize="30sp" /> 

        </FrameLayout> 

       </RelativeLayout> 


      </LinearLayout> 

     </LinearLayout> 

    </LinearLayout> 
aufblasen

Gibt es einen guten Weg, das zu tun? Was ist falsch?

+0

Wo werden 'mlinearLayoutContainerTabs' erstellt? Könnten Sie mehr Code bereitstellen? –

+0

Ich habe 'mlinearLayoutContainerTabs' hinzugefügt. es ist nur eine einfache Aktivität – Johnny

Antwort

0

Es gibt einige Unterschiede beim Hinzufügen von Ansichten aus XML und durch Aufblasen von anatomischen Ansichten.

Aber im Falle von Relative Layout, wenn Sie XML vorbereiten, werden so viele relative Eigenschaften verwendet, um verschiedene Ansichten zusammen in XML zu setzen.

Und wenn wir fügen Ansichten dynamisch Relative-Layout verwenden wir Option von addrule wie unten verwenden sollten:

RelativeLayout relativeLayout = new RelativeLayout(getActivity()); 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     Button button1 = new Button(this); 
     button1.setId(1); 
     Button button2 = new Button(this); 
     button2.setId(2); 
     relativeLayout.addView(button1); 
     relativeLayout.addView(button2); 
     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) button1.getLayoutParams(); 
     lp.addRule(RelativeLayout.RIGHT_OF, button2.getId()); 
     lp.addRule(RelativeLayout.LEFT_OF, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_END, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_LEFT, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_BASELINE, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, button2.getId()); 
     lp.addRule(RelativeLayout.ABOVE, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_TOP, button2.getId()); 
     lp.addRule(RelativeLayout.START_OF, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_RIGHT, button2.getId()); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_END, button2.getId()); 
     lp.addRule(RelativeLayout.END_OF, button2.getId()); 

Fast alle Relative Layout-Eigenschaften können Sie dynamisch durch AddRull.

Verwandte Themen