Android 列表视图布局权重
在我的主要活动中,我有两个直线布局。其中一个用于保存按钮,另一个用于保存列表视图。我通过点击屏幕底部的按钮来动态添加它们 我还想设置它们的布局权重(Android 列表视图布局权重,android,android-layout,listview,Android,Android Layout,Listview,在我的主要活动中,我有两个直线布局。其中一个用于保存按钮,另一个用于保存列表视图。我通过点击屏幕底部的按钮来动态添加它们 我还想设置它们的布局权重(3f用于第一个和第二个按钮和列表,而1f用于第三个按钮和列表) 这就是我的布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ap
3f
用于第一个和第二个按钮和列表,而1f
用于第三个按钮和列表)
这就是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="majewski.ninja.myphonelibrary.ListActivity"
android:background="#000000">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/fragmentsHolder">
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/fragmentsHolder"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/listsHolder"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add new fragment"
android:id="@+id/addFragmentButton"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
这就是我设置布局权重的方式(相同的fot按钮和列表视图)
在我添加两列后,它如下所示:
但是,当我添加第三个按钮(1层布局宽度)时,一切都变得像这样奇怪(按钮看起来还可以):
我做错了什么
我的主要活动的完整代码:
package ninja.majewski.myphonelibrary;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import ninja.majewski.myphonelibrary.data.BookList;
public class ListActivity extends Activity {
private BookList bookList;
private int numberOfLists = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
bookList = new BookList();
Button addFragmentButton = (Button) findViewById(R.id.addFragmentButton);
addFragmentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(numberOfLists) {
case 0:
addButtonAndList("Title");
break;
case 1:
addButtonAndList("Author");
break;
case 2:
addButtonAndList("No.");
break;
case 3:
addButtonAndList("Date");
break;
}
numberOfLists++;
}
});
}
private void addButtonAndList(String columnName) {
// returns a button with setted name and layout params
Button button = getButton(columnName);
// returns a list with setted name and layout params
ListView list = getNewListView(columnName);
// simply adds views to two of my layouts
addToLayout(button, list);
}
private Button getButton(String text) {
Button button = new Button(ListActivity.this);
button.setText(text);
float weight = getColumnWeight(text); // returns 3f, 3f, 1f
button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT, weight));
return button;
}
private float getColumnWeight(String text) {
float value = 0;
switch(text) {
case "Title":
value = 3f;
break;
case "Author":
value = 3f;
break;
case "No.":
value = 1f;
break;
case "Date":
value = 2f;
break;
}
return value;
}
private ListView getNewListView(String columnName) {
ArrayList<String> values = new ArrayList<String>();
switch(columnName) {
case "Title":
values = bookList.getNamesList();
break;
case "Author":
values = bookList.getAuthorsList();
break;
case "No.":
values = bookList.getPagesList();
break;
case "Date":
values = bookList.getDatesList();
break;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
ListView list = new ListView(this);
list.setAdapter(adapter);
float weight = getColumnWeight(columnName);
System.out.println(weight);
list.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT, weight));
return list;
}
private void addToLayout(Button button, ListView list) {
LinearLayout layout1 = (LinearLayout) findViewById(R.id.fragmentsHolder);
layout1.addView(button);
LinearLayout layout2 = (LinearLayout) findViewById(R.id.listsHolder);
layout2.addView(list);
}
}
包ninja.majewski.myphonelibrary;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入ninja.majewski.myphonelibrary.data.BookList;
公共类ListActivity扩展了活动{
私人书单;
私有int numberOfLists=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_列表);
bookList=新建bookList();
按钮addFragmentButton=(按钮)findViewById(R.id.addFragmentButton);
addFragmentButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
开关(数字列表){
案例0:
添加按钮列表(“标题”);
打破
案例1:
addButtonAndList(“作者”);
打破
案例2:
addButtonAndList(“编号”);
打破
案例3:
添加按钮列表(“日期”);
打破
}
numberOfLists++;
}
});
}
私有void addButtonAndList(字符串columnName){
//返回具有设置的名称和布局参数的按钮
Button Button=getButton(columnName);
//返回具有设置的名称和布局参数的列表
ListView列表=getNewListView(columnName);
//只需将视图添加到我的两个布局中
addToLayout(按钮、列表);
}
私有按钮getButton(字符串文本){
按钮按钮=新按钮(ListActivity.this);
按钮.setText(文本);
float-weight=getColumnWeight(text);//返回3f、3f、1f
button.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_内容,
LinearLayout.LayoutParams.MATCH_PARENT,weight));
返回按钮;
}
私有浮点getColumnWeight(字符串文本){
浮点数=0;
开关(文本){
案例“标题”:
数值=3f;
打破
案例“作者”:
数值=3f;
打破
案件“编号”:
数值=1f;
打破
案件“日期”:
值=2f;
打破
}
返回值;
}
私有ListView getNewListView(字符串columnName){
ArrayList值=新的ArrayList();
开关(列名称){
案例“标题”:
values=bookList.getNamesList();
打破
案例“作者”:
values=bookList.getAuthorsList();
打破
案件“编号”:
values=bookList.getPagesList();
打破
案件“日期”:
values=bookList.getDatesList();
打破
}
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,值);
ListView列表=新的ListView(此);
list.setAdapter(适配器);
浮动权重=getColumnWeight(columnName);
系统输出打印项次(重量);
list.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_内容,
LinearLayout.LayoutParams.MATCH_PARENT,weight));
退货清单;
}
专用void addToLayout(按钮、列表视图列表){
LinearLayout布局1=(LinearLayout)findViewById(R.id.fragmentsHolder);
布局1.添加视图(按钮);
LinearLayout布局2=(LinearLayout)findViewById(R.id.listsHolder);
布局2.添加视图(列表);
}
}
使用权重时,应将布局宽度设置为0dp。现在,您让每个ListView使用WRAP_内容决定其自身的宽度,然后LinearLayout使用权重来决定如何收缩每个视图以适合所有视图
new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, weight)
package ninja.majewski.myphonelibrary;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import ninja.majewski.myphonelibrary.data.BookList;
public class ListActivity extends Activity {
private BookList bookList;
private int numberOfLists = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
bookList = new BookList();
Button addFragmentButton = (Button) findViewById(R.id.addFragmentButton);
addFragmentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(numberOfLists) {
case 0:
addButtonAndList("Title");
break;
case 1:
addButtonAndList("Author");
break;
case 2:
addButtonAndList("No.");
break;
case 3:
addButtonAndList("Date");
break;
}
numberOfLists++;
}
});
}
private void addButtonAndList(String columnName) {
// returns a button with setted name and layout params
Button button = getButton(columnName);
// returns a list with setted name and layout params
ListView list = getNewListView(columnName);
// simply adds views to two of my layouts
addToLayout(button, list);
}
private Button getButton(String text) {
Button button = new Button(ListActivity.this);
button.setText(text);
float weight = getColumnWeight(text); // returns 3f, 3f, 1f
button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT, weight));
return button;
}
private float getColumnWeight(String text) {
float value = 0;
switch(text) {
case "Title":
value = 3f;
break;
case "Author":
value = 3f;
break;
case "No.":
value = 1f;
break;
case "Date":
value = 2f;
break;
}
return value;
}
private ListView getNewListView(String columnName) {
ArrayList<String> values = new ArrayList<String>();
switch(columnName) {
case "Title":
values = bookList.getNamesList();
break;
case "Author":
values = bookList.getAuthorsList();
break;
case "No.":
values = bookList.getPagesList();
break;
case "Date":
values = bookList.getDatesList();
break;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
ListView list = new ListView(this);
list.setAdapter(adapter);
float weight = getColumnWeight(columnName);
System.out.println(weight);
list.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT, weight));
return list;
}
private void addToLayout(Button button, ListView list) {
LinearLayout layout1 = (LinearLayout) findViewById(R.id.fragmentsHolder);
layout1.addView(button);
LinearLayout layout2 = (LinearLayout) findViewById(R.id.listsHolder);
layout2.addView(list);
}
}
new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, weight)