简体   繁体   English

Android LinearLayout间距

[英]Android LinearLayout Spacing

I am having problems writing a piece of code for android. 我在为android编写一段代码时遇到了问题。 I am using the eclipse development environment. 我正在使用eclipse开发环境。 What I am trying to accomplish is to have the days of the week evenly spaced out on the first row of a table (with six rows). 我想要完成的是让一周中的几天在表格的第一行(六行)上均匀分布。 I can not figure out how to make it so that the words actually spread out, and not just stick together in a group. 我无法弄清楚如何使它实际上扩散出来,而不仅仅是在一个组中。 (yes I have tried using weights). (是的,我尝试过使用重量)。 My code is as follows. 我的代码如下。 I apologize in advance for any misspellings in the question or comments in the code. 我提前为问题中的任何拼写错误或代码中的评论道歉。

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

}

And the XML Layout in main 而主要的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>

To recap The Code works except for spacing out the linear layouts/textviews 回顾一下代码的工作原理,除了间隔线性布局/文本视图

I want to thank you all in advance for helping me out on this (and so many other) issues. 我想提前感谢你们帮助我解决这个(以及其他许多)问题。

Sincerely, 此致

Reid 里德

Solution is simple. 解决方案很简单。 You need to use android:stretchColumns attribute. 您需要使用android:stretchColumns属性。 Translate following example to your code 将以下示例翻译成您的代码

<?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 Java代码

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

do you want like this? 你想要这样吗?

public TextView[] populateDays(int startDay) {

    ...

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

    ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM