Android LinearLayout Spacing - PullRequest
       1

Android LinearLayout Spacing

0 голосов
/ 23 декабря 2011

У меня проблемы с написанием кода для Android.Я использую среду разработки Eclipse.Я пытаюсь добиться того, чтобы дни недели были равномерно распределены в первом ряду таблицы (с шестью строками).Я не могу понять, как сделать так, чтобы слова на самом деле распространялись, а не просто слипались в группе.(да, я пробовал использовать весы).Мой код выглядит следующим образом.Я заранее прошу прощения за любые опечатки в вопросе или комментарии в коде.

package A3.cal;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TableLayout;
import android.widget.TableRow;

public class A3Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); //it works dont touch it...
    setContentView(R.layout.main); //old Content View
    MonthView(); //setup the initial view
}

public void MonthView(){
    TableRow[] tableRows = new TableRow[6]; //create table rows for the table
    LinearLayout[] dayHeaderFrames = new LinearLayout[7]; //create the frame layouts for the table headers
    TextView[] days = new TextView[7]; //create new text views array
    days = populateDays(0); //make the textviews say the proper days (this can be faster by manipulating the strings and then adding to textview)
    TableLayout monthView = (TableLayout) findViewById(R.id.monthView); //find month View in the xml file
    LinearLayout headerLayout = new LinearLayout(this); //create the linear layout that will hold the frame layouts for the text views**
    headerLayout.setBackgroundColor(Color.WHITE); //make the linear layouts white
    LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f); //create the layout perameters for childeren

    for(int i = 0; i < 6; i++){ //create the table rows
        tableRows[i] = new TableRow(this); //create the new rows
    }

    tableRows[0].addView(headerLayout); //add the header layout to the first row
    tableRows[0].setBackgroundColor(Color.RED); //set the background table row (only the first one which I am concentrating on) to red
    monthView.setBackgroundColor(Color.BLUE); // make the table blue

    for(int i = 0; i < 7; i++){ //add the headers to the month day header row
        dayHeaderFrames[i] = new LinearLayout(this); //create new frames
        headerLayout.addView(dayHeaderFrames[i], ll); //add the frames to the first row in the table
        dayHeaderFrames[i].addView(days[i]); //add the textview objects to the frames (the text view objects already have the correct text from when populate days was called)
    }

    for(int i = 0; i < 6; i++){ //add the rows to the month view
        monthView.addView(tableRows[i]); //add the new rows to the table
    }
}

public TextView[] populateDays(int startDay){
    TextView[] daysTextViewArr = new TextView[7]; //create a textview array
    String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; //days of the week

    for(int i = 0; i < 7; i++){ //put the days into the order based upon the start day
        daysTextViewArr[i] = new TextView(this); //create a new text view object

        //the following logic puts the days into order
        int day = i + startDay; 
        if(day > 6){ //if the day will exceed the array put it back to the begining
            day = day - 7; 
        }

        daysTextViewArr[i].setText(days[i]); //set the text in the text view to the propper day
    }

    return daysTextViewArr;
}

}

И XML-макет в основном

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">


<TableLayout
    android:id="@+id/monthView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</TableLayout>

Подводя итог Код работает за исключением разнесения линейных макетов / текстовых представлений

Я хочу заранее поблагодарить вас всех за помощь в решении этого (и многих других) вопросов.

С уважением,

Рейд

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

ты так хочешь?

public TextView[] populateDays(int startDay) {

    ...

        for(int i = 0; i < 7; i++){
        ...
        daysTextViewArr[i] = new TextView(this);
        daysTextViewArr[i].setPadding(10, 0, 5, 0);
        ...
        }

    ...
1 голос
/ 23 декабря 2011

Решение простое.Вам необходимо использовать атрибут android: stretchColumns.Переведите следующий пример в ваш код

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">


<TableLayout
android:id="@+id/monthView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1,2,3,4,5">

</TableLayout>
</LinearLayout>

Java code

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getView();
}


    public TextView[] populateDays(int startDay) {
    TextView[] daysTextViewArr = new TextView[7]; 
    String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday" }; 
    for (int i = 0; i < 7; i++) {
        daysTextViewArr[i] = new TextView(this);
        int day = i + startDay;
        if (day > 6) {
            day = day - 7;
        }
        daysTextViewArr[i].setText(days[i]);
    }

    return daysTextViewArr;
}

public void getView() {
    TableRow[] tableRows = new TableRow[6];

    TextView[] days = new TextView[7];
    days = populateDays(0);
    TableLayout monthView = (TableLayout) findViewById(R.id.monthView);
    LinearLayout headerLayout = new LinearLayout(this);
    headerLayout.setBackgroundColor(Color.WHITE);
    LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT, 1f); // create the

    for (int i = 0; i < 6; i++) {
        tableRows[i] = new TableRow(this);

    }
    for (int i = 0; i < 6; i++) {
        tableRows[0].addView(days[i]);
    }

    monthView.setBackgroundColor(Color.BLUE);

    for (int i = 0; i < 6; i++) {
        monthView.addView(tableRows[i]);
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...