Reputation: 1721
I'm trying to inflate xml-layout into custom View-class, which is then placed into LinearLayout in actual software. After some Googling I managed to create custom class which inflates the layout by using following class:
public class LitteringView extends RelativeLayout
{
public LitteringView(Context context) {
super(context);
// TODO Auto-generated constructor stub
View.inflate(context, R.layout.littering_layout, this);
}
public LitteringView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
for(int i = 0 ; i < getChildCount() ; i++){
getChildAt(i).layout(l, t, r, b);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Now it definitely inflates when I add it to the linearlayout:
layout.addView(new LitteringView(getActivity()));
Problem is that it takes the whole screen while the screen should be divided equally between LinearLayout's three children. Other Views are also created dynamically. How I can prevent it from taking the whole space?
I'm trying to create one custom View/class and package its functions inside it which I then could easily add to the parent layout (in this case the LinearLayout) while wanting to utilize xml to define the layout of the View.
Upvotes: 0
Views: 527
Reputation: 435
You need to use 'weight' for your views. A simple example for this:
Layout.LayoutParams params = new LinearLayout.LayoutParams(width, height, weight);
You need to optimize it for your case. Give all your views a weight value equally(eg: 1 for all of them) and they should share the view.
Upvotes: 1