2017-09-17 5 views
2

J'essaie de créer un RelativeLayout dynamiquement mais pour une raison quelconque, la vue personnalisée est dessinée en haut de la vue de texte. Est-ce que quelqu'un sait ce qui ne va pas et comment placer la vue du texte au-dessus du dessin?FrameLayout n'apparaît pas dans la vue texte

public class MyRLayout extends android.support.v4.app.Fragment { 

    public MyRLayout() {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.my_relativelayout, container, false); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     View v = getView(); 
     assert v != null; 

     RelativeLayout relativelayout = v.findViewById(RelativeLayout_custom); 

     RelativeLayout.LayoutParams rlp1 = new RelativeLayout.LayoutParams(GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT); 
     RelativeLayout.LayoutParams paramsP1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); 

     // add text view 
     TextView tv1 = new TextView(getActivity()); 
     tv1.setText("Hello World"); 
     TextViewCompat.setTextAppearance(tv1, android.R.style.TextAppearance_Medium); 
     tv1.setTextColor(Color.WHITE); 
     tv1.setGravity(Gravity.CENTER); 

     // set view for drawing1 
     FrameLayout frameLayoutP1 = new FrameLayout(getActivity()); 
     paramsP1.height = fortyDp; 
     Drawing1 cvDrawing1 = new Drawing1(getActivity()); 
     cvDrawing1.setLayoutParams(paramsP1); 
     frameLayoutP1.addView(cvDrawing1); 

     // generate IDs for views 
     tv1.setId(View.generateViewId()); 
     frameLayoutP1.setId(View.generateViewId()); 

     // set RelativeLayout rules for views 
     paramsP1.addRule(RelativeLayout.BELOW, tv1.getId()); 

     // setLayoutParams for views 
     tv1.setLayoutParams(rlp1); 

     // add views to RelativeLayout 
     relativelayout.addView(tv1); 
     relativelayout.addView(frameLayoutP1); 

     super.onActivityCreated(savedInstanceState); 
    } 
} 

enter image description here

Répondre

1
tv1.setLayoutParams(rlp1); 

devrait être

tv1.setLayoutParams(paramsP1); 

(celui que vous avez ajouté la règle ci-dessous pour)

vous configurez les mauvaises LayoutParams.

+0

Vous êtes des suggestions place la vue du texte sous le dessin. Comment peut-il être placé AU-DESSUS du dessin? – MacaronLover

+0

@MacaronLover En plaçant la vue de texte en haut et en plaçant le dessin sous la vue de texte. – FWeigl

+0

Je l'ai déjà fait mais ça ne marche pas: 'paramsP1.addRule (RelativeLayout.BELOW, tv1.getId());' – MacaronLover