作者:白羊黔中草 | 来源:互联网 | 2024-12-25 10:33
我正在尝试使用布局文件来排列多行的TextView和Button。每一行应包含一个占屏幕约2/3宽度的TextView和一个占屏幕约1/3宽度的Button。具体布局如下:
第1行:[TextView(屏幕的~2/3)] [按钮(屏幕的~1/3)]
第2行:[TextView(屏幕的~2/3)] [按钮(屏幕的~1/3)]
第3行:[TextView(屏幕的~2/3)] [按钮(屏幕的~1/3)]
第4行:[TextView(屏幕的~2/3)] [按钮(屏幕的~1/3)]
第5行:[TextView(屏幕的~2/3)] [按钮(屏幕的~1/3)]
我对此感到困惑,不确定应该使用哪种布局方式。是否可以使用TableLayout或RelativeLayout?能否提供一些XML示例代码?非常感谢您的帮助!
解决方案
是的,你可以使用LinearLayout通过设置android:weightSum属性来实现这一布局。以下是一个单行布局的示例:
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1.0" >
android:text="左侧文本"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.67" />
如果你有多个布局文件(例如main.xml和list_template.xml),可以通过以下方式动态加载这些布局:
main.xml
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/mainLayout"/>
list_template.xml
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="100" >
android:text="左侧文本"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="67"
android:id="@+id/list_textView" />
接下来,可以在Activity中动态加载并填充这些布局:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout mainLayout = findViewById(R.id.mainLayout);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i <5; i++) {
View tempView = inflater.inflate(R.layout.list_template, null);
TextView textView = tempView.findViewById(R.id.list_textView);
textView.setText("TextView " + i);
Button button = tempView.findViewById(R.id.list_button);
button.setText("Button " + i);
button.setId(i);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button " + v.getId() + " clicked", Toast.LENGTH_SHORT).show();
}
});
mainLayout.addView(tempView);
}
}
}