我想知道我如何设法对齐行中的所有列。我正在使用 ListView
,在其中显示我的游戏的药物列表。每行的列大小不同。我希望看到每一列一直到列表末尾都具有相同的宽度,但总体宽度不同。
从图中可以看出,列没有对齐。我画线是为了让我更清楚地知道我想要什么。您还可以看到按钮将关闭到另一列。通过图片上的箭头,我想清楚地表明这些按钮应该放在更多的行尾。
我的实现使用以下样式:
<!-- 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/