2016-02-05 77 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)