Reputation: 29
Well, my problem is little bit complicated(for me).
Suppose i have a RelativeLayout
(Or any other Layout
as needed).
Now i make some View
like TextView
.(multiple View
).
Those View
will include following characteristics i will give from java code.
View
to the Layout in a specific position.View
can be overlapped (like following picture)where positionX is will be an integer defining where the View
will be set in the Layout
from top.
Now i want to add those View
to the Layout
like the following photo.
(All View
will be of rectangular size; Sorry for the bad Editing.)
How can i do this? I badly need the solution.
I hope i have explained my problem with my poor English :(
Thank you in advance <3 <3
Upvotes: 0
Views: 1398
Reputation: 2599
You can also use FlexBox layout provided by google to add view dynamically. You can check this Medium post for clear concept about Flexbox Layout
Upvotes: 2
Reputation: 13
If you want to add multiple views dynamically maybe try to refactor them into one compund view (it will be easier to position them)
https://www.vogella.com/tutorials/AndroidCustomViews/article.html
What type of ViewGroup do you use? If its constraint layout you can set constraints programatically using ConstraintLayout.LayoutParams in same way as SaadAAkash mentioned
Upvotes: 0
Reputation: 321
Try this:
//-----Main Layout-----\\
LinearLayout l1 = findViewById(R.id.myLinear);
ll.setOrientation(LinearLayout.VERTICAL);
//-----First layout-----\\
LinearLayout l11 = new LinearLayout(this);
l11.setBackgroundColor(android.R.color.holo_orange_dark);
l1.addView(l11, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
//-----Second layout-----\\
LinearLayout l12 = new LinearLayout(this);
l12.setBackgroundColor(android.R.color.holo_green_dark);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(-30, 20, 20, 0); //Negative margin top to superposition views
l1.addView(l12, layoutParams);
Upvotes: 1
Reputation: 3193
As you've mentioned,
All View will be of rectangular size
So let's take a button yourButton
for example. You need to pass two values, one from top & one from left where you want to put the view. Then use the following method, as you wanted it addView()
to achieve the desired output in a RelativeLayout
:
private void addView(child, positionFromTop, positionFromLeft, width, height) {
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.topMargin = (int)(positionFromTop);
layoutParams.leftMargin = (int)(positionFromLeft);
yourButton.setLayoutParams(layoutParams);
}
You can customize the layout using the width and height in the similar way programmatically, if required. Please refer to this answer to get the code of how to resize a custom view programmatically. Hope it helps!
Upvotes: 2