-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相同和Button
ListView
):
float weight = getColumnWeight(text); // returns 3f, 3f, 1f
button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT, weight));
後,我加兩列,它看起來像這樣:
但是當我添加第三個(與1樓的佈局寬度)一切順利怪異像這樣(按鈕看起來OK雖然):
我在做什麼錯?我的主要活動
全碼:
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);
}
}