android - 对齐 ListView 中的所有列

标签 android android-layout listview

我想知道我如何设法对齐行中的所有列。我正在使用 ListView,在其中显示我的游戏的药物列表。每行的列大小不同。我希望看到每一列一直到列表末尾都具有相同的宽度,但总体宽度不同。

Current implementation

从图中可以看出,列没有对齐。我画线是为了让我更清楚地知道我想要什么。您还可以看到按钮将关闭到另一列。通过图片上的箭头,我想清楚地表明这些按钮应该放在更多的行尾。

我的实现使用以下样式:

<!-- List style for the drug sell list -->
<style name="traderY.List">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_alignParentLeft">true</item>
    <item name="android:layout_alignParentTop">true</item>
</style>

<!-- Header style for quantity column -->
<style name="traderY.HeaderQuantityText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.15</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#EDEFF0</item>
</style>

<!-- Header style for cost column -->
<style name="traderY.HeaderCostText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.20</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#EDEFF0</item>
</style>

<!-- Header style for name column -->
<style name="traderY.HeaderNameText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.45</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#EDEFF0</item>
</style>

<!-- Row style for quantity column -->
<style name="traderY.QuantityListText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.15</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#000000</item>
</style>

<!-- Row style for cost column -->
<style name="traderY.CostListText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.20</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#000000</item>
</style>

<!-- Row style for name column -->
<style name="traderY.NameListText">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.45</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:padding">4dip</item>
    <item name="android:layout_margin">4dip</item>
    <item name="android:textColor">#000000</item>
</style>

<!-- Row style for button column -->
<style name="traderY.ListButton" parent="@android:style/Widget.Button">
    <item name="android:layout_width">0dip</item>
    <item name="android:layout_weight">0.20</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">15dip</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:gravity">center</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">0.6</item>
    <item name="android:background">@drawable/custom_btn_black_pearl</item>
    <item name="android:padding">4dip</item>
</style>

如您所见,我设置或尝试使用这两项设置列宽:

<item name="android:layout_width">0dip</item>
<item name="android:layout_weight">0.20</item>

我在读到您可以使用权重设置宽度。我基本上使用了与设置百分比相同的值。如果我没理解错的话,weight 值代表的是其他成分之间的比例。我发现这是一个 Stack Overflow 问题的解决方案,我在几个教程中找到了它。我找到的教程之一就是这个 here .

为了分享更多信息,这里还有所有组件的布局,从包含 ListView 的 fragment 开始。

fragment 布局

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

  <TextView
    android:id="@+id/money"
    style="@style/traderY.TextCenter" />

  <TextView
    android:id="@+id/location"
    style="@style/traderY.TextCenter" />

  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/junkie_icon"/>

  <ListView
    android:id="@+id/drug_list"
    style="@style/traderY.List"
    android:layout_weight="1"/>

  <TableRow
    style="@style/traderY.ButtonRow">

    <Button
        android:id="@+id/nothing"
        style="@style/traderY.ButtonCenter"
        android:text="@string/exit"/>

  </TableRow>

</LinearLayout>

这是页眉布局。如您所见,我省略了按钮的最后一列,因为不需要为其显示标题:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_weight="1"
  android:background="#000000">

  <TextView
    android:text="@string/header_quantity"
    style="@style/traderY.HeaderQuantityText" />

  <TextView
    android:text="@string/header_cost"
    style="@style/traderY.HeaderCostText" />

  <TextView
    android:text="@string/header_name"
    style="@style/traderY.HeaderNameText" />

</LinearLayout>

这是我使用的每一行的布局:

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

  <TextView
    android:id="@+id/drug_quantity"
    style="@style/traderY.QuantityListText" />

  <TextView
    android:id="@+id/drug_cost"
    style="@style/traderY.CostListText" />

  <TextView
    android:id="@+id/drug_name"
    style="@style/traderY.NameListText" />

  <Button
    android:id="@+id/drug_sell_btn"
    android:text="@string/sell_drugs_action"
    style="@style/traderY.ListButton"/>

</LinearLayout>

这些是我使用的样式/布局,我不会更改代码中的任何这些属性。所以问题只能出在我的 XML 文件中。

有谁知道我在这里做错了什么?也许我的调查是错误的,我做不到。对于解决此问题的任何帮助或意见,我将不胜感激。如果这甚至不可能,请告诉我。

最佳答案

我发现我的解决方案是正确的。 weight 属性完成了这项工作。由于某些未知原因,gradle 在构建应用程序时没有看到更改。或者也许是模拟器。这不是第一次发生这样的事情。我将不得不调查为什么会发生这种情况。

关于android - 对齐 ListView 中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36723277/

相关文章:

java - 压缩的 mp4 视频播放时间过长(exoplayer)

android - AlertDialog 并带有列表项和自定义主题

android - 我无法在 res 目录中添加新文件夹

android - OnItemClickListener() - Android ListView

android - 如何让 ImageSpan 与 TextView 中的其余文本具有相同的高度

android - 有没有更安全的方法在 Android 项目中存储敏感字符串?

java - 底部导航栏被 ScrollView 布局推出 View 之外

android - setListAdapter 不适用于 Android 中的 Sherlock Fragment

ios - 包含 ListView 的 View 上的 Touchstart、-end 和 -move 事件

android - 使用 LoaderManager 加载依赖查询的首选方法