Reputation: 832
I am learning Android to my own for this I want to dynamically add textviews to the linear layout with equal weights for expample:
textview1 textview2 (so on)
but if there is only one textview it should fill the parent that is it should be match parent and if there are two items then they should half fill the parent for each item!
so this is my populating method inside the recycler view to dynamically populate the linear layout with text views:
private void populateResourcesItems(ArrayList<ResourcesItem> resources, int position, RecyclerViewHolder recyclerViewHolder) {
recyclerViewHolder.resourceItemsLayout.removeAllViews();
for (int its = 0; its < resources.size(); its++) {
PackagesViewItem packagesViewItem = new PackagesViewItem(context);
if (hasValue(resources.get(its).getResourceName())) {
packagesViewItem.getResourcesItem().setText(resources.get(its).getResourceName());
packagesViewItem.getResourcesItem().setSelected(true);
}
//add the view item layout to adapter container
recyclerViewHolder.resourceItemsLayout.addView(packagesViewItem);
}//for end
}//populateResourcesItems ends
and this is my linear layout inside the recycler view layout:
<LinearLayout
android:weightSum="1"
android:background="@color/colorPrimary"
android:id="@+id/resourceItemsLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/subscribeButton"
android:layout_below="@+id/resourcesTitle"
android:layout_marginStart="@dimen/_20sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginEnd="@dimen/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
android:orientation="horizontal" />
here is my class to popuplate the views inside the framelayout:
public class PackagesViewItem extends FrameLayout {
private LinearLayout resourcesViewItemLayout;
private TextView resourcesItem;
@SuppressLint("InflateParams")
public PackagesViewItem(@NonNull Context context) {
super(context);
resourcesViewItemLayout = (LinearLayout) LayoutInflater.from(context).inflate(
R.layout.layout_packages_view_item, null);
resourcesItem = (TextView) resourcesViewItemLayout.findViewById(R.id.resourcesItem);
this.addView(resourcesViewItemLayout);
}//constructor ends
public LinearLayout getResourcesViewItemLayout() {
return resourcesViewItemLayout;
}
public void setResourcesViewItemLayout(LinearLayout resourcesViewItemLayout) {
this.resourcesViewItemLayout = resourcesViewItemLayout;
}
public TextView getResourcesItem() {
return resourcesItem;
}
public void setResourcesItem(TextView resourcesItem) {
this.resourcesItem = resourcesItem;
}
}//class ends
and the layout for this view item class is:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/resourcesViewItemLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/packagesTabTextColorUnselected">
<TextView
android:id="@+id/resourcesItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/opensans_regular"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/mobile_bundles_resources"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/_12ssp"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
the problem is that it when the item is single textview is not filling the parent see here:
I want to achieve like these boxes:
Upvotes: 3
Views: 431
Reputation: 364451
Remove in your LinearLayout android:weightSum="1"
and define this LinearLayout.LayoutParams
:
val linearLayout : LinearLayout = findViewById(R.id.layout)
val lp = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
lp.weight = 1f
Then just apply to the views added in the layout:
val textView : TextView = TextView(context)
textView.setText("Text1")
textView.height = ...
//...
val textView2 : TextView = TextView(context)
textView2.setText("Text2")
textView2.height = ...
//....
linearLayout.addView(textView, lp)
linearLayout.addView(textView2, lp)
Upvotes: 2
Reputation: 19253
there are plenty of problems in your code, but question is about unneeded margins so...
don't set them
android:layout_marginStart="@dimen/_20sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginEnd="@dimen/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
also remove android:weightSum="1"
and set weight for created TextView
s just like Gabriele Mariotti suggested
Upvotes: 0