如何在不使用重力的情况下移动右侧的第一列 属性?
How can I move the first column on the right side without using gravity property?
在 table 我尝试将红色柱子从右侧移动到左侧,以便旋转。
我尝试使用 android:gravity="right"
,但没有结果。
如何将绿色列移动到最右侧并将其他列移动到左侧而没有问题。
这是一个screenshot
我的布局:
<?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="right"
android:id="@+id/fillable_area">
<TableLayout
android:gravity="right"
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="right"
>
<TableLayout
android:gravity="right"
android:id="@+id/scrollable_part2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<HorizontalScrollView
android:gravity="left"
android:id="@+id/scroller"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TableLayout
android:gravity="left"
android:id="@+id/scrollable_part"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
</LinearLayout>
我的代码:
package com.examp.swap_items;
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.view.ViewGroup;
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;
import android.app.Activity;
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.WHITE);
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.scrollable_part2);
//rest of the table (within a scroll view)
TableLayout scrollablePart = (TableLayout)findViewById(R.id.scrollable_part);
for(int i = 0; i < 10; i++) {
TextView fixedView = makeTableRowWithText("fixed number " + i, scrollableColumnWidths[0], fixedRowHeight);
fixedView.setBackgroundColor(Color.GREEN);
fixedView.setGravity(Gravity.RIGHT);
fixedColumn.addView(fixedView);
row = new TableRow(this);
row.setLayoutParams(wrapWrapTableRowParams);
row.setGravity(Gravity.LEFT);
row.setBackgroundColor(Color.RED);
row.addView(makeTableRowWithText("scroll 1", scrollableColumnWidths[1], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 2", scrollableColumnWidths[1], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 3", scrollableColumnWidths[2], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 4", scrollableColumnWidths[3], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 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);
}
}
Gravity 不是这个问题的解决方案,android:gravity
属性 移动元素的 contents,这就是为什么你可以看到所有您的 'fixed' 文本与列的右侧对齐。
子元素在 LinearLayout
中的顺序完全由它们在布局中出现的顺序决定 xml。在垂直布局中,它们按从上到下的顺序排列,在水平布局中,它们按从左到右的顺序排列。所以在你的情况下,如果你想改变这些列的顺序,你只需要在你的布局中以正确的顺序放置它们:
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:id="@+id/scroller"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/scrollable_part"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</HorizontalScrollView>
<TableLayout
android:id="@+id/scrollable_part2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在 table 我尝试将红色柱子从右侧移动到左侧,以便旋转。
我尝试使用 android:gravity="right"
,但没有结果。
如何将绿色列移动到最右侧并将其他列移动到左侧而没有问题。
这是一个screenshot
我的布局:
<?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="right"
android:id="@+id/fillable_area">
<TableLayout
android:gravity="right"
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="right"
>
<TableLayout
android:gravity="right"
android:id="@+id/scrollable_part2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<HorizontalScrollView
android:gravity="left"
android:id="@+id/scroller"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TableLayout
android:gravity="left"
android:id="@+id/scrollable_part"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
</LinearLayout>
我的代码:
package com.examp.swap_items;
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.view.ViewGroup;
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;
import android.app.Activity;
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.WHITE);
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.scrollable_part2);
//rest of the table (within a scroll view)
TableLayout scrollablePart = (TableLayout)findViewById(R.id.scrollable_part);
for(int i = 0; i < 10; i++) {
TextView fixedView = makeTableRowWithText("fixed number " + i, scrollableColumnWidths[0], fixedRowHeight);
fixedView.setBackgroundColor(Color.GREEN);
fixedView.setGravity(Gravity.RIGHT);
fixedColumn.addView(fixedView);
row = new TableRow(this);
row.setLayoutParams(wrapWrapTableRowParams);
row.setGravity(Gravity.LEFT);
row.setBackgroundColor(Color.RED);
row.addView(makeTableRowWithText("scroll 1", scrollableColumnWidths[1], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 2", scrollableColumnWidths[1], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 3", scrollableColumnWidths[2], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 4", scrollableColumnWidths[3], fixedRowHeight));
row.addView(makeTableRowWithText("scroll 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);
}
}
Gravity 不是这个问题的解决方案,android:gravity
属性 移动元素的 contents,这就是为什么你可以看到所有您的 'fixed' 文本与列的右侧对齐。
子元素在 LinearLayout
中的顺序完全由它们在布局中出现的顺序决定 xml。在垂直布局中,它们按从上到下的顺序排列,在水平布局中,它们按从左到右的顺序排列。所以在你的情况下,如果你想改变这些列的顺序,你只需要在你的布局中以正确的顺序放置它们:
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:id="@+id/scroller"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/scrollable_part"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</HorizontalScrollView>
<TableLayout
android:id="@+id/scrollable_part2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>