2016-02-05 66 views
-1

我在我的主要活动中有两个LinearLayouts。其中一个用于保存按钮,另一个用于保存ListView。我通过点击屏幕底部的按钮来动态添加它们。ListView布局重量

我也想建立自己的布局重量(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> 

这就是我如何添加按钮和列表视图:

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); 
} 

这就是我如何设置布局重量(FOT相同和ButtonListView):

float weight = getColumnWeight(text); // returns 3f, 3f, 1f 
button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
       LinearLayout.LayoutParams.MATCH_PARENT, weight)); 

后,我加两列,它看起来像这样:

enter image description here

但是当我添加第三个(与1楼的布局宽度)一切顺利怪异像这样(按钮看起来OK虽然):

enter image description here

我在做什么错?我的主要活动

全码:

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); 
    } 

} 

回答

1

使用权,你应该设置布局宽度0dp。现在你让每个ListView使用WRAP_CONTENT来确定它自己的宽度,然后LinearLayout使用权重来决定如何缩小每个视图以适合它们。

new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, weight)