水平动态添加TextViews到等权重线性布局
Horizontally Add TextViews to Equally Weighted Linear Layout Dynamically
我正在学习 Android 为此,我想动态地将文本视图添加到具有相等权重的线性布局中,例如:
textview1 textview2(以此类推)
但如果只有一个 textview,它应该填充父级,即它应该匹配父级,如果有两个项目,那么它们应该为每个项目填充一半的父级!
所以这是我在回收器视图中的填充方法,用于使用文本视图动态填充线性布局:
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
这是我在回收站视图布局中的线性布局:
<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" />
这是我的 class 在框架布局中弹出视图:
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
此视图项的布局 class 是:
<?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>
问题是,当项目是单个文本视图时,它没有填充父项,请参见此处:
我想像这些盒子一样实现:
在您的 LinearLayout android:weightSum="1"
中删除并定义此 LinearLayout.LayoutParams
:
val linearLayout : LinearLayout = findViewById(R.id.layout)
val lp = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
lp.weight = 1f
然后只应用到布局中添加的视图:
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)
您的代码中有很多问题,但问题是关于不需要的边距,所以...
不要设置它们
android:layout_marginStart="@dimen/_20sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginEnd="@dimen/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
还删除 android:weightSum="1"
并为创建的 TextView
设置权重,就像 Gabriele Mariotti 建议的那样
我正在学习 Android 为此,我想动态地将文本视图添加到具有相等权重的线性布局中,例如:
textview1 textview2(以此类推)
但如果只有一个 textview,它应该填充父级,即它应该匹配父级,如果有两个项目,那么它们应该为每个项目填充一半的父级!
所以这是我在回收器视图中的填充方法,用于使用文本视图动态填充线性布局:
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
这是我在回收站视图布局中的线性布局:
<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" />
这是我的 class 在框架布局中弹出视图:
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
此视图项的布局 class 是:
<?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>
问题是,当项目是单个文本视图时,它没有填充父项,请参见此处:
我想像这些盒子一样实现:
在您的 LinearLayout android:weightSum="1"
中删除并定义此 LinearLayout.LayoutParams
:
val linearLayout : LinearLayout = findViewById(R.id.layout)
val lp = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT)
lp.weight = 1f
然后只应用到布局中添加的视图:
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)
您的代码中有很多问题,但问题是关于不需要的边距,所以...
不要设置它们
android:layout_marginStart="@dimen/_20sdp"
android:layout_marginTop="@dimen/_5sdp"
android:layout_marginEnd="@dimen/_20sdp"
android:layout_marginBottom="@dimen/_20sdp"
还删除 android:weightSum="1"
并为创建的 TextView
设置权重,就像 Gabriele Mariotti 建议的那样