簡體   English   中英

在屏幕底部使用水平滾動視圖創建線性布局

[英]Creating Linear layout with Horizontal scroll view at the bottom of the screen

我正在嘗試創建一個5x5的表格,其中的按鈕占用屏幕空間的70%。 在此之下,我想使用滾動條水平放置按鈕(在屏幕底部表示)。 Java和xml文件如下所示。 在輸出屏幕上,我只能看到創建的5x5表格,底部空白。 我是android和layout的新手,請為此提供幫助。 謝謝!

xml文件:

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

<TableLayout
    android:id="@+id/mainPage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">        
</TableLayout>

<HorizontalScrollView
    android:id="@+id/hsvMain"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">          

    <LinearLayout
        android:id="@+id/scroll_ll"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:isScrollContainer="true"
        android:scrollbars="horizontal"
        android:orientation="horizontal">
        </LinearLayout>     
    </HorizontalScrollView>


</LinearLayout>

Java文件:

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.match_main_skl);
    table = new TableLayout (this);
    setControls();

    hsv = new HorizontalScrollView(this);
    ll = new LinearLayout(this);
    mainTable();
}

private void setControls()
{
    table = (TableLayout) findViewById(R.id.mainPage);
    hsv = (HorizontalScrollView) findViewById(R.id.hsvMain);
    ll = (LinearLayout) findViewById(R.id.scroll_ll);

}

private void mainTable()
{
    //find screen size of the device (supports all versions)
    Point windowSize = MAUIUtil.GetDefaultWindowSize(this);  
    int cellSize;
    if (windowSize.x >= 0.70 * windowSize.y)
        cellSize = windowSize.x / numColumns;
        else cellSize = (int) ((0.70*windowSize.y)/numColumns);


**//5x5 TABLE**
    TableRow.LayoutParams buttonRow = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT, 1.0f);
    buttonRow.height = cellSize * numRows;
    //buttonRow.height = windowSize.x;
    table.setLayoutParams(buttonRow);
    table.setStretchAllColumns(true);


    for(int rw = 0; rw < numRows; rw++)
    {
        TableRow row = new TableRow(this);

        row.setPadding(0, 0, 0, 0); //setPadding(left,top,right,bottom)
        row.setId(ROW_ID_OFFSET + rw);//giving each row an id

        TableLayout.LayoutParams tbLp = new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT,1.0f);
        tbLp.height = cellSize;
        table.setLayoutParams(tbLp);

        for(int col = 0; col < numColumns; col++)
        {
            int btnID = COLUMN_ID_OFFSET + (numColumns * (rw - 1)) +  col;

            //Adding buttons
            Button btn = new Button(this);
            btn.setId(btnID);
            btn.setPadding(0, 0, 0, 0);
            btn.setTypeface(Typeface.DEFAULT_BOLD);
            btn.setBackgroundColor(Color.CYAN);
            btn.setText(Integer.toString(btnID));

            row.addView(btn);   
        }
        table.addView(row);
    }

    **//LAST SCROLLABLE HORIZONTAL ROW**

    hsv.addView(ll);

    LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
    llp.height = windowSize.y - cellSize;
    hsv.setLayoutParams(llp);

    LinearLayout sll = new LinearLayout(this);

    for(int col = 0; col < scrNumColumns; col++)
    {
        int btnID = SCROLL_COLUMN_ID_OFFSET + col;

        //Adding buttons
        Button btn = new Button(this);
        btn.setId(btnID);
        btn.setPadding(0, 0, 0, 0);
        btn.setTypeface(Typeface.DEFAULT_BOLD);
        btn.setBackgroundColor(Color.RED);
        btn.setText(Integer.toString(btnID));

        sll.addView(btn);   
        sll.setGravity(Gravity.BOTTOM);
    } 
    ll.addView(sll);
 }

在onCreate()方法中調用findViewById()之后,似乎創建了一個新的LinearLayout和一個新的Horizo​​ntalScrollView。 因此,您要操作的是新創建的視圖,而不是.xml文件中定義的視圖。

嘗試刪除這些行:

hsv = new HorizontalScrollView(this);
ll = new LinearLayout(this);

使用下面的代碼。我已經按照您的描述實現了它。

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


 >

<TableLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 >

  <TableRow > </TableRow>
  <TableRow > </TableRow>
  <TableRow > </TableRow>
  <TableRow > </TableRow>
  <TableRow > </TableRow>


 </TableLayout>   

<HorizontalScrollView 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true" >

 <LinearLayout 
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

 <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button1"/>
  <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button2"/>

   <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button3"/>

    <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button4"/>

     <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="Button5"/>


       </LinearLayout>

</HorizontalScrollView>



</RelativeLayout>

希望對您有所幫助。您可以詢問是否還有其他疑問。

在線性布局中使用android:alain_parentBottom="true" 。您將實現所需的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM