Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列表视图布局权重_Android_Android Layout_Listview - Fatal编程技术网

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)