2016-07-23 5 views
-1

Ich möchte die Spalte, die den Wert fünf enthält. Es ist auf der rechten Seite, wie in der Abbildung gezeigt, ich möchte es fest und nicht bewegen.Wie kann ich eine feste Spalte in einer Tabelle für Android machen?

enter image description here

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

    <TableLayout 
     android:id="@+id/table_header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_horizontal" 
      > 


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

       <TableLayout 
        android:id="@+id/scrollable_part" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"/> 

      </HorizontalScrollView> 


     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 



    package com.example.freez_t00; 

import java.util.ArrayList; 

import android.R.layout; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.HorizontalScrollView; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 
import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TableRow.LayoutParams; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    private boolean showSummaries; 

    private TableLayout summaryTable; 
    private TableLayout frozenTable; 
    private TableLayout contentTable; 
    private Button backButton ; 
    private HorizontalScrollView hor; 
    private TextView recyclableTextView; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_main); 






      TableRow.LayoutParams wrapWrapTableRowParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      int[] fixedColumnWidths = new int[]{20, 20,20, 20, 20}; 
      int[] scrollableColumnWidths = new int[]{20, 20, 20, 30, 30}; 
      int fixedRowHeight = 50; 
      int fixedHeaderHeight = 60; 
      TableRow row = new TableRow(this); 
      //header (fixed vertically) 
      TableLayout header=(TableLayout)findViewById(R.id.table_header); 

      row.setLayoutParams(wrapWrapTableRowParams); 
      row.setGravity(Gravity.CENTER); 
      row.setBackgroundColor(Color.YELLOW); 
      row.addView(makeTableRowWithText("col1", fixedColumnWidths[0],fixedHeaderHeight)); 
      row.addView(makeTableRowWithText("col2", fixedColumnWidths[1],fixedHeaderHeight)); 
      row.addView(makeTableRowWithText("col3", fixedColumnWidths[2],fixedHeaderHeight)); 
      row.addView(makeTableRowWithText("col4", fixedColumnWidths[3],fixedHeaderHeight)); 
      row.addView(makeTableRowWithText("col5", fixedColumnWidths[4],fixedHeaderHeight)); 

      header.addView(row); 


      hor = (HorizontalScrollView)findViewById(R.id.scroller); 
      hor.postDelayed(new Runnable(){ 
       public void run() { 
        hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT); 
       } 
      }, 1L); 

      // TableLayout fixedColumn = (TableLayout) findViewById(R.id.fixed_column); 
      //rest of the table (within a scroll view) 
      TableLayout scrollablePart = (TableLayout)findViewById(R.id.scrollable_part); 
      for(int i = 0; i < 10; i++) { 
        row = new TableRow(this); 
        row.setLayoutParams(wrapWrapTableRowParams); 
        row.setGravity(Gravity.CENTER); 
        row.setBackgroundColor(Color.WHITE); 
        row.addView(makeTableRowWithText("value 1", scrollableColumnWidths[1], fixedRowHeight)); 
        row.addView(makeTableRowWithText("value 2", scrollableColumnWidths[1], fixedRowHeight)); 
        row.addView(makeTableRowWithText("value 3", scrollableColumnWidths[2], fixedRowHeight)); 
        row.addView(makeTableRowWithText("value 4", scrollableColumnWidths[3], fixedRowHeight)); 
        row.addView(makeTableRowWithText("value 5", scrollableColumnWidths[4], fixedRowHeight)); 
        scrollablePart.addView(row); 
      } 








    } 




    public TextView makeTableRowWithText(String text, int widthInPercentOfScreenWidth, int fixedHeightInPixels) { 
      int screenWidth = getResources().getDisplayMetrics().widthPixels; 
      recyclableTextView = new TextView(this); 
      recyclableTextView.setText(text); 
      recyclableTextView.setTextColor(Color.BLACK); 
      recyclableTextView.setTextSize(20); 
      recyclableTextView.setWidth(widthInPercentOfScreenWidth * screenWidth/100); 
      recyclableTextView.setHeight(fixedHeightInPixels); 
      return recyclableTextView; 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

Verwenden Sie zwei Tabellen. Eins, das scrollt. Ein anderer mit dieser einen Spalte? –

+0

danke für dich, ich werde versuchen, aber können Sie Code xml hier –

+0

Ich weiß nicht, ob es funktionieren wird, so habe ich keinen Code –

Antwort

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

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

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

     <TableLayout 
      android:id="@+id/scrollable_part" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</ScrollView> 

</LinearLayout> 



package com.example.freez_t00; 



public class MainActivity extends Activity { 

private TextView recyclableTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    TableRow.LayoutParams wrapWrapTableRowParams = new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
    int[] fixedColumnWidths = new int[]{20, 20,20, 20, 20}; 
    int[] scrollableColumnWidths = new int[]{20, 20, 20, 20, 20}; 
    int fixedRowHeight = 70; 
    int fixedHeaderHeight = 70; 
    TableRow row = new TableRow(this); 
    //header (fixed vertically) 
    TableLayout header=(TableLayout)findViewById(R.id.table_header); 

    row.setLayoutParams(wrapWrapTableRowParams); 
    row.setBackgroundColor(Color.YELLOW); 
    row.addView(makeTableRowWithText("col1", fixedColumnWidths[0],fixedHeaderHeight)); 
    row.addView(makeTableRowWithText("col2", fixedColumnWidths[1],fixedHeaderHeight)); 
    row.addView(makeTableRowWithText("col3", fixedColumnWidths[2],fixedHeaderHeight)); 
    row.addView(makeTableRowWithText("col4", fixedColumnWidths[3],fixedHeaderHeight)); 
    row.addView(makeTableRowWithText("col5", fixedColumnWidths[4],fixedHeaderHeight)); 

    header.addView(row); 

    // TableLayout fixedColumn = (TableLayout) findViewById(R.id.fixed_column); 
    //rest of the table (within a scroll view) 
    TableLayout scrollablePart = (TableLayout)findViewById(R.id.scrollable_part); 
    for(int i = 0; i < 10; i++) { 
     row = new TableRow(this); 
     row.setLayoutParams(wrapWrapTableRowParams); 
     row.setGravity(Gravity.CENTER); 
     row.setBackgroundColor(Color.WHITE); 
     row.addView(makeTableRowWithText("value 1", scrollableColumnWidths[1], fixedRowHeight)); 
     row.addView(makeTableRowWithText("value 2", scrollableColumnWidths[1], fixedRowHeight)); 
     row.addView(makeTableRowWithText("value 3", scrollableColumnWidths[2], fixedRowHeight)); 
     row.addView(makeTableRowWithText("value 4", scrollableColumnWidths[3], fixedRowHeight)); 
     row.addView(makeTableRowWithText("value 5", scrollableColumnWidths[4], fixedRowHeight)); 
     scrollablePart.addView(row); 
    } 
} 

public TextView makeTableRowWithText(String text, int widthInPercentOfScreenWidth, int fixedHeightInPixels) { 

    int screenWidth = getResources().getDisplayMetrics().widthPixels; 

    recyclableTextView = new TextView(MainActivity.this); 
    recyclableTextView.setText(text); 

    recyclableTextView.setTextColor(Color.BLACK); 
    recyclableTextView.setTextSize(20); 
    recyclableTextView.setGravity(Gravity.CENTER); 
    recyclableTextView.setWidth(widthInPercentOfScreenWidth * screenWidth/100); 
    recyclableTextView.setHeight(fixedHeightInPixels); 
    return recyclableTextView; 
} 

}

Diese Ihnen helfen kann. Ich reformiere einfach Ihren Code.

Verwandte Themen