2016-04-19 5 views
3

どのようにして列内のすべての列を整列させることができるのだろうかと思っていました。私はListViewを使用しています。そこに私のゲームの薬のリストが表示されます。列は、各行ごとに異なるサイズです。私は、各列がリストの最後まで同じ幅を持ちますが、全体的に同じ幅ではないことを確認したいと思います。リストビューですべての列を整列する

Current implementation

あなたが写真からもわかるように、列が整列されていません。私は、私が望むものをさらにはっきりさせるために線を描きます。また、ボタンが他の列に近づいていることがわかります。絵の上にある矢印を使って、ボタンが行の最後まで配置されていることを明確にしたかったのです。

私はあなたのことを読んでいた

<item name="android:layout_width">0dip</item> 
<item name="android:layout_weight">0.20</item> 
:あなたは、私が設定見ることができるように

<!-- 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> 

または私はそれらの二つのアイテムを使用して列幅を設定しよう:

私の実装では、次のスタイルを使用しています重量を使って幅を設定できます。私は基本的にパーセンテージを設定するのと同じ値を使用しました。私が正しく理解している場合、weightの値は他のコンポーネント間の比率を表します。スタックオーバーフローの問題の解決策としてこれを見つけました。私はいくつかのチュートリアルでそれを見つけました。私が見つけたチュートリアルの1つはhereです。

さらに多くの光を共有するために、リストビューを含むフラグメントから始まる、すべてのコンポーネントのレイアウトもここにあります。

フラグメントレイアウトここ

<?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ファイルにしかない。

ここで間違っていることは誰にも分かりますか?多分私の調査は間違っていて、私はそれをすることはできません。私はこの問題を解決するために何か助けやコメントを感謝します。これが不可能な場合は、私に知らせてください。

答えて

1

解決策が正しいことがわかりました。 weightプロパティは仕事をしました。何らかの不明な理由により、アプリケーションを構築しているときにgradleが変更を認識しなかった。あるいはエミュレータかもしれない。このようなことが起こったのは初めてのことではありませんでした。私はこれがなぜ起こるかを調べなければならないでしょう。

+0

私はあなたの答えを受け入れられた答えとしてマークすることをお勧めします。コミュニティがそれの利益を得ることができるように:) –

+0

私はそれを行うことができる前に、私は2日間待たなければなりません。しかし、それは私の計画だった。 –

+0

問題ありません。クール。 :) –

0

style = "@ style/traderY.QuantityListText"の重みを大きくします。 0.2または0.3を作成する

0

テキストビューをLinearLayoutにラップして、parentViewを塗りつぶすように設定します。このようにして、すべてのボタンが右に揃えられます。

<?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"> 

<LinearLayout 
    android:layout_weight="1" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" /> 

    <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" /> 
</LinearLayout> 

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

</LinearLayout> 
+1

この場合、売りボタンのlayout_weightも削除し、代わりにwrap_contentを使用するだけです。 – Karakuri

+0

あなたはそうです、彼はすべきですが、別の場所でトレースするコードがたくさんあるので、私はこれを逃しました。良い点 –

関連する問題