gpt4 book ai didi

android -> 相对布局在点击时更改按钮文本对齐方式

转载 作者:行者123 更新时间:2023-11-30 04:36:37 26 4
gpt4 key购买 nike

这是我的 main.xml:`

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:addStatesFromChildren="false"
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/header"
android:layout_marginRight="2dp"
android:layout_marginLeft="2dp"
android:layout_height="wrap_content"
android:background="@android:color/black"
android:layout_width="fill_parent"
android:layout_alignParentTop="true">
<TableRow>
<TextView
android:id="@+id/leftHeader"
android:textColor="@android:color/black"
android:layout_margin="1dp"
android:gravity="center_horizontal"
android:layout_weight="1"
android:background="#ffcccccc"
android:text="textview1"
android:layout_width="30dip" />
<TextView
android:id="@+id/rightHeader"
android:textColor="@android:color/black"
android:gravity="center_horizontal"
android:layout_weight="1"
android:layout_margin="1dp"
android:background="@android:color/white"
android:text="textview2"
android:layout_width="70dip" />
</TableRow>
</TableLayout>
<ScrollView
android:id="@+id/table_scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="2dp"
android:layout_marginLeft="2dp"
android:layout_below="@+id/header"
android:layout_above="@+id/buttonTable">
<TableLayout
android:id="@+id/maintable"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:color/black">
<TableRow
android:id="@+id/maintableRow">
<TextView
android:id="@+id/maintableLeft"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginRight="1dp"
android:layout_marginLeft="1dp"
android:text="textview1"
android:layout_width="30dip" />
<TextView
android:id="@+id/maintableRight"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:text="textview2"
android:layout_width="70dip" />
</TableRow>
</TableLayout>
</ScrollView>
<TableLayout
android:id="@+id/buttonTable"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:color/black"
android:layout_alignParentBottom="true">
<TableRow>
<Button
android:id="@+id/button_ResetData"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Reset Data"
android:layout_gravity="center"
android:layout_weight="1" />
<Button
android:id="@+id/button_Refresh"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Refresh"
android:gravity="center"
android:layout_weight="1" />
</TableRow>
</TableLayout>

`

在我按下其中一个按钮后,它的文本对齐方式向左移动,我怎样才能让它保持居中?第一个表(标题)(textview1,textview2)发生了类似的事情,但在这里它也减少了 textsize View 中文本的数量......

编辑:我设法找到了导致更改的代码,但我不知道如何解决这个问题。也许有人可以向我解释为什么会发生这种情况以及如何解决?

    private void fillTableView(List<BatteryInfo> list) {

TextView leftHeader = (TextView) findViewById(R.id.leftHeader);
TextView rightHeader = (TextView) findViewById(R.id.rightHeader);

LayoutParams leftHeaderLayoutParams = leftHeader.getLayoutParams();
LayoutParams rightHeaderLayoutParams = rightHeader.getLayoutParams();

TableLayout contentTable = (TableLayout) findViewById(R.id.maintable);

contentTable.removeAllViews();

for (int i = list.size() - 1; i >= 0; i--) {

TextView tv1 = new TextView(this);
tv1.setTextColor(Color.BLACK);
tv1.setGravity(Gravity.CENTER);
tv1.setBackgroundColor(Color.LTGRAY);
tv1.setLayoutParams(leftHeaderLayoutParams);
tv1.setText(String.valueOf(list.get(i).getLevel()));

TextView tv2 = new TextView(this);
tv2.setTextColor(Color.BLACK);
tv2.setGravity(Gravity.CENTER);
tv2.setBackgroundColor(Color.WHITE);
tv2.setLayoutParams(rightHeaderLayoutParams);
tv2.setText(list.get(i).getDurationTimeInString());

TableRow tblRow = new TableRow(this);
tblRow.addView(tv1);
tblRow.addView(tv2);

contentTable.addView(tblRow);
}
}

在我使用 removeAllViews 或任何 addView 函数后,最顶层表格的布局发生了变化,正如我之前解释的那样。为什么会这样?

最佳答案

您可以通过更改 android:layout_width="30dip" 来解决此问题和 android:layout_width="70dip"leftHeaderrightHeaderandroid:layout_width="fill_parent" .不过,我不得不承认,我并不完全确定这是为什么。

不过,您可能需要考虑使用 ListAdapter,而不是每次都清除和重新填充 TableLayout。 .它更适合您正在做的事情(并且可能也会表现得更好)。

更新编号 2:

请注意 main.xml 中的更改和 onCreate 方法中的更改。这将使您的标题保持静态,同时让您的 ListView 滚动,并且将按钮的 TableLayout 更改为 LinearLayout 将解决对齐问题。

下面是如何使用自定义适配器而不是 TableLayout 来实现这一点(这并不是真正适用于像这样的动态数据):

将 main.xml 更改为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:addStatesFromChildren="false" android:layout_height="wrap_content">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_alignParentTop="true" android:id="@+id/header">
<TextView android:id="@+id/leftHeader" android:textColor="@android:color/black"
android:layout_margin="1dp" android:gravity="center_horizontal"
android:layout_weight="1" android:background="#ffcccccc" android:text="textview1"
android:layout_width="fill_parent" android:layout_height="wrap_content"/>
<TextView android:id="@+id/rightHeader" android:textColor="@android:color/black"
android:gravity="center_horizontal" android:layout_weight="1"
android:layout_margin="1dp" android:background="@android:color/white"
android:text="textview2" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
</LinearLayout>

<LinearLayout android:id="@+id/buttonTable" android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="@android:color/black"
android:layout_alignParentBottom="true" >
<Button android:id="@+id/button_ResetData"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:text="Reset Data" android:layout_gravity="center"
android:layout_weight="1" />
<Button android:id="@+id/button_Refresh"
android:layout_height="wrap_content" android:layout_width="fill_parent"
android:text="Refresh" android:gravity="center"
android:layout_weight="1" />
</LinearLayout>

<ListView android:id="@+id/listView" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:fadingEdge="none"
android:layout_below="@id/header" android:layout_above="@id/buttonTable">
</ListView>

为您的行添加 XML 布局文件 (row.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<TextView android:id="@+id/maintableLeft"
android:layout_height="wrap_content" android:layout_weight="1"
android:layout_marginRight="1dp" android:layout_marginLeft="1dp"
android:gravity="center_horizontal" android:background="#ffcccccc"
android:textColor="@android:color/black" android:layout_width="fill_parent" />
<TextView android:id="@+id/maintableRight"
android:layout_height="wrap_content" android:background="#ffcccccc"
android:textColor="@android:color/black" android:layout_weight="1"
android:layout_marginLeft="1dp" android:layout_marginRight="1dp"
android:gravity="center_horizontal" android:layout_width="fill_parent" />
</LinearLayout>

现在一切就绪,可以从 BaseAdapter 创建自定义类来显示您的信息(并使您的布局更好地工作):

class CustomAdapter extends BaseAdapter {
private List<BatteryInfo> info;
private LayoutInflater inflater;

public CustomAdapter(Context context, List<BatteryInfo> x) {
this.info = x;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
return info.size();
}

public Object getItem(int position) {
return info.get(position);
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {

View v;
v = inflater.inflate(R.layout.row, parent, false);

BatteryInfo b = (BatteryInfo) getItem(position);

((TextView) v.findViewById(R.id.maintableLeft)).setText(b
.getDurationTimeInString());
((TextView) v.findViewById(R.id.maintableRight)).setText(b
.getLevel());

return v;
}
}

修改您的 onCreate 方法以膨胀 header ,添加它,然后使用新的 CustomAdapter 将您的数据绑定(bind)到您的 ListView(我为这个例子创建了一个假的 BatteryInfo 类,您需要稍微修改一下以获得这个工作):

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final ListView lv = (ListView) this.findViewById(R.id.listView);
final Context context = this;

Button refresh = (Button) this.findViewById(R.id.button_Refresh);
refresh.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
List<BatteryInfo> x = new ArrayList<BatteryInfo>();
x.add(new BatteryInfo());
x.add(new BatteryInfo());
x.add(new BatteryInfo());
x.add(new BatteryInfo());


lv.setAdapter(new CustomAdapter(context, x));
}
});
}

关于android -> 相对布局在点击时更改按钮文本对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com