我需要向视图添加不确定数量的文本视图,如果它可以自动调整到屏幕,我会很高兴。
我尝试将水平 LinearLayouts 添加到垂直父 LinearLayout,但这样我可以每行添加 2 个或 3 个项目,但它没有这种无序的效果。
有什么办法可以做到这一点?
我需要向视图添加不确定数量的文本视图,如果它可以自动调整到屏幕,我会很高兴。
我尝试将水平 LinearLayouts 添加到垂直父 LinearLayout,但这样我可以每行添加 2 个或 3 个项目,但它没有这种无序的效果。
有什么办法可以做到这一点?
我建议不要动态创建水平布局(如果你这样做的话)。
相反,您可以像这样创建水平布局资源:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="2">
<TextView
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_weight="1"
android:text="ONE" />
<TextView
android:id="@+id/end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="TWO" />
</LinearLayout>
然后在你的主要活动中这样做:
for(i in 0..2) {
val view: View?
val inflater =
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
view = inflater.inflate(R.layout.horizontal, null)
val textOne = view.findViewById<TextView>(R.id.start)
textOne.text = "TEST $i"
val textTwo = view.findViewById<TextView>(R.id.start)
textTwo.text = "TEST $i"
(mainL as LinearLayout).addView(view)
}
mainL 是主要的垂直布局,您可以在其中添加填充,或者您可以修改水平布局,这取决于您想要实现的目标。
在这个例子中,我使用了一个 for 循环,只是为了向你展示创建了 3 行,如果你有一个要放入的文本列表,则在每个 cicle 中,你可以使用这种语法 for 循环
for ((index, value) in names.withIndex()) {
println("$index: $value")
}
参考:https ://kotlinlang.org/docs/tutorials/kotlin-for-py/loops.html
对于您的具体情况,我建议使用填充开始和结束的主布局,并在顶部和底部的水平布局边距中创建元素之间的空间。
如果您想使用 LinearLayouts,您可以进入您的 xml 并仅添加一个 Vertical LinearLayout。
在此之后,您可以为您的行添加水平线性布局,您将向其中添加单元格,在您的情况下为 TextViews。
在“OnCreate”中,我只获取视图并调用用于将行和单元格添加到指定行的方法。
public class MainActivity extends AppCompatActivity {
/**
* @verticalLayout
* Contains the rows of your String matrix
*/
LinearLayout verticalLayout;
/**
* @rowCellDivisor
* Contains the horizontal layout of each row
*/
LinkedList<LinearLayout> rows;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verticalLayout = findViewById(R.id.verticalLayout);
addRow();
addRow();
addRow();
addRow();
addTextViewToRow(0);
addTextViewToRow(0);
addTextViewToRow(0);
addTextViewToRow(1);
addTextViewToRow(1);
addTextViewToRow(2);
addTextViewToRow(2);
addTextViewToRow(2);
addTextViewToRow(2);
addTextViewToRow(2);
}
在那里我们创建了一个行,它只不过是一个水平方向的 LinearLayout。
private void addRow(){
LinearLayout row
= new LinearLayout(
getApplicationContext()
);
row.setOrientation(LinearLayout.HORIZONTAL);
row.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
verticalLayout.addView(row);
}
这将创建要添加到指定行的 TextView。
private void addTextViewToRow(int rowAtPosition){
TextView textView = new TextView(getApplicationContext());
textView.setText("StartLongTextaaaaaaaaaaaaaaaaaaaaaaaa" +
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +
"ccccccccccccccccccccccccccccccLongTextEnd");
/**
* Third entry for params is for weight, so that you can
* decide how much space the cell will occupy in the row
* when there will be more than one view in the same row.
*/
LinearLayout.LayoutParams layoutParams
= new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
1f
);
/**
* setMargins e.g. between cells of the row and screen
* borders
*/
layoutParams.setMargins(25, 0, 25, 25);
textView.setLayoutParams(
layoutParams
);
LinearLayout view = (LinearLayout)
verticalLayout.getChildAt(rowAtPosition);
view.addView(textView);
}
}