4

テキストビューで太字のテキストを使用すると、奇妙な動作をします。

問題は次のとおりです。テキストを保持し、後でリストのアイテムとして使用されることになっているカスタムアイテムを作成したため、アイテムは垂直方向のスクロールビューリニアレイアウトに複数回含まれています。

アイテムのレイアウトは次のとおりです

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    style="@style/ButtonItem">
    <TextView
        android:id="@+id/m_oItem_TextView_TopLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="20dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12" />
    <TextView
        android:id="@+id/m_oItem_TextView_TopMiddle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
        android:layout_toRightOf="@+id/m_oItem_TextView_TopLeft"
        android:layout_toLeftOf="@+id/m_oItem_TextView_TopRight"
        android:layout_marginRight="20dp"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12"
        android:gravity="right"/>
    <TextView
        android:id="@+id/m_oItem_TextView_TopRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="40dp"
        android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12"/>
    <TextView
        android:id="@+id/m_oItem_TextView_Bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
        android:layout_alignRight="@+id/m_oItem_TextView_TopRight"
        android:layout_below="@+id/m_oItem_TextView_TopLeft"
        android:layout_marginTop="5dp"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_14" />
    <ImageView 
        android:id="@+id/m_oItem_PlaceHolder"
        android:layout_width="wrap_content"
        android:layout_height="10dp"
        android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
        android:layout_alignRight="@+id/m_oItem_TextView_TopRight"
        android:layout_below="@+id/m_oItem_TextView_Bottom"
        android:contentDescription="@string/image_description"/>
    <ImageView
        android:id="@+id/m_oPart_Arrow_Image"
        android:scaleType="fitCenter"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true" 
        android:layout_marginRight="5dp"
        android:src="@drawable/arrow_right"
        android:contentDescription="@string/image_description"/>
</RelativeLayout>

m_oItem_TextView_Bottom textviewは、長すぎる可能性のあるテキストを含む部分であるため、必要に応じてtextviewの高さを増やします。これをテストしたところ、すべてが正しく機能しており、テキストビューには必要な高さがありました。

しかし、一度設定すると

android:textStyle="bold"

もちろん、テキストは幅が広くなるため、より多くの行が必要になる場合があります。今の問題は、これがどういうわけかアンドロイドによって説明されないということです。

たとえば、太字ではない行に次のような2行がほとんど必要ない場合(下の画像の最後の項目)

2行の最後のアイテム

太字のテキストには3行が必要ですが、textviewには2行しか表示されません

3行の最後のアイテム

誰かが同じ問題に遭遇したり、解決策や少なくとも私が問題を解決する方法を提案したりしたことがありますか?とにかく事前に感謝します

編集:要求に応じてButtonItemスタイルはこれです

<style name="ButtonItem">
    <item name="android:background">@drawable/button_item</item>
</style>

@ drawable / button_item存在:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"  android:drawable="@drawable/button_item_down" />
    <item android:state_selected="true"  android:drawable="@drawable/button_item_selected" />
    <item android:drawable="@drawable/button_item_normal" />
</selector>

@ drawable / button_item_downは:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <stroke
                android:width="@dimen/button_item_stroke_thickness"
                android:color="@color/black"/>
        </shape>
    </item>
</layer-list>

@ drawable / button_item_selectedは:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <stroke
                android:width="@dimen/button_item_stroke_thickness"
                android:color="@color/black"/>
        </shape>
    </item>
</layer-list>

@ drawable / button_item_normal存在:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/transparent" />
            <stroke
                android:width="@dimen/button_item_stroke_thickness"
                android:color="@color/black" />
        </shape>
    </item>
</layer-list>

基本的には、アイテムの下に黒い線を作成し、クリックまたは選択した場合に背景を白にするためにあります。ただし、選択された状態がコードで設定されることはないため、選択されたオンは使用されません。

スタイルも背景にせずに試してみましたが、さすがに問題はありませんでした。

もう一度編集:さて、問題をもう少し追跡することができました。テキストビューのサイズ変更は実際には正しいです。具体的な問題は、次の場合です。行の最後の単語(たとえば、テストが最後の単語であるのに「これはテストです」)が改行を引き起こす場合、最後の単語は何らかの形で十分な長さである必要があります。質問で使用したのと同じ項目で、ダミーの文字列を使用してこれをテストします。

ここにいくつかの写真があります ここに画像の説明を入力してください

ご覧のとおり、問題の原因となっている行にはもう1文字必要ですが、その単語は十分な長さです。

最後の編集:答えが見つかりました(以下を参照)

4

2 に答える 2

1

TextViewは太字のテキストで適切にサイズ変更されているため、拡張されたTextViewに合わせて拡張する必要があるRelativeLayoutです。子が変更されたときにサイズを変更するのが得意なので、LinearLayouts(RelativeLayoutを使用して作成したデザインに一致するように1つはVertical、もう1つはHorizo​​ntal)を使用すると運が良くなる可能性があります。

参照: http: //logc.at/2011/10/18/when-to-use-linearlayout-vs-relativelayout/

于 2013-01-17T19:35:13.470 に答える
0

最後に、私は問題を追跡しました、

だからここに解決策があります、問題はm_oItem_TextViewBottomのmargin_Rightでした:これは以下によって引き起こされました:

android:layout_alignRight="@+id/m_oItem_TextView_TopRight"

したがって、それは問題を引き起こすマージン権を効果的に作成しました。私はこれを他のテキストビューと右マージンでテストしましたが、それらはすべて同じ問題を抱えていました。

私はそれを同じマージンのパディングに置き換え、アイテムの最終的な解決策としてこれに行き着きました。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    style="@style/ButtonItem">
    <TextView
        android:id="@+id/m_oItem_TextView_TopLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="20dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12" />
    <TextView
        android:id="@+id/m_oItem_TextView_TopMiddle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
        android:layout_toRightOf="@+id/m_oItem_TextView_TopLeft"
        android:layout_toLeftOf="@+id/m_oItem_TextView_TopRight"
        android:layout_marginRight="20dp"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12"
        android:gravity="right"/>
    <TextView
        android:id="@+id/m_oItem_TextView_TopRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:paddingRight="40dp"
        android:layout_alignTop="@+id/m_oItem_TextView_TopLeft"
        android:textColor="@color/black"
        android:textSize="@dimen/font_size_12"/>
    <TextView
        android:id="@+id/m_oItem_TextView_Bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
        android:layout_below="@+id/m_oItem_TextView_TopLeft"
        android:layout_marginTop="5dp"
        android:paddingRight="40dp"
        android:textColor="@color/black"
        android:textStyle="bold" />
    <ImageView 
        android:id="@+id/m_oItem_PlaceHolder"
        android:layout_width="wrap_content"
        android:layout_height="10dp"
        android:layout_alignLeft="@+id/m_oItem_TextView_TopLeft"
        android:layout_alignRight="@+id/m_oItem_TextView_TopRight"
        android:layout_below="@+id/m_oItem_TextView_Bottom"
        android:contentDescription="@string/image_description"/>
    <ImageView
        android:id="@+id/m_oPart_Arrow_Image"
        android:scaleType="fitCenter"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true" 
        android:layout_marginRight="5dp"
        android:src="@drawable/arrow_right"
        android:contentDescription="@string/image_description"/>
</RelativeLayout>
于 2013-01-18T21:06:33.880 に答える