3

私はこのような2つのテキストビューを持っています:

=======================
= TextView1 TextView2 =
=======================

そして、テキストビューが長すぎて次のように表示される場合を検出したいと思います。

=======================
=      TextView1      =
=      TextView2      =
=======================

現在、長いテキストの場合、次のように表示されます。

=======================
= TextView1 Text      =
=           View2     =
=======================

テキストが短い場合はテキストビューが並んでいて、長すぎる場合は2番目のテキストビューが分割されずに2行目に移動するようにするには、どうすればよいですか?

単一のテキストビューを作成し、長さに応じてテキストを作成するソリューション(短い場合はテキスト1 +パディング+テキスト2、長い場合はテキスト1 + "\ n" +テキスト2)を考えましたが、このソリューションは好きではありません。

テキストビューを含むレイアウトの方向を水平方向から垂直方向に変更するように2番目のテキストが分割されるかどうかを検出する方法はありますか?

アップデート

これは私のxmlです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center">

    <TextView
        android:id="@+id/my_text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="10dp"
        android:text="@string/text1"/>

    <TextView
        android:id="@+id/my_text_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="5dp"/>

</LinearLayout>
4

3 に答える 3

1

私はより良い解決策を見つけました。テキストビューを自動サイズ変更可能なテキストビューに変更しました(詳細はこちら

また、両方のテキストビューが同じ値にサイズ変更されるように、各テキストビューは別々のレイアウトになっています。私のxmlは次のようになります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:id="@+id/value_linear_layout"
              android:gravity="center">

    <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:layout_height="wrap_content">
        <com.mihaela.view.AutoResizeTextView
            android:id="@+id/my_text_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

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

        <com.mihaela.view.AutoResizeTextView
            android:id="@+id/my_text_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

これを行うために、 AutoResizeTextViewからOnTextResizeListenerを実装しました。

public class TextWidthResizeListener implements OnTextResizeListener {

    @Override
    public void onTextResize(TextView textView, float oldSize, float newSize) {
        TextPaint paint = textView.getPaint();
        if (paint.measureText(textView.getText().toString()) > (valueLinearLayout.getWidth() / 2)){
            valueLinearLayout.setOrientation(LinearLayout.VERTICAL);
        }
    }
}

ここで、valueLinearLayoutは次のとおりです。

valueLinearLayout = (LinearLayout)findViewById(R.id.value_linear_layout);

このソリューションは、テキストビューが最小サイズになるまで並べて配置されたときにサイズが調整されるため、私に最適です。最小サイズに達してもテキストが収まらない場合、テキストビューは上下に配置されます。

また、リスナーに関するこのアイデアは、サイズ変更不可能なテキストビューにも適用できます。この答えを正しいものとして設定します。

于 2012-07-10T15:53:32.903 に答える
0

単一の複数行を使用しTextView、テキストを次のように設定する必要があります。

mTextView.setText(text1+" "+text2);

また

mTextView.setText(text1+"\n"+text2);

あなたの特定のニーズに応じて。

編集:でテキストを指定してから、このテキストをhtml使用して表示することができます。Html.fromHtml(htmlString)TextView

 String text1 ="<font color=\"red\">This is some text!</font>"
 String text2="<font color=\"blue\">This is some other text!</font>"
 textView.setText(Html.fromHtml(text1+ "<br/>"+ text2);
于 2012-07-09T13:39:28.427 に答える
0

私は受け入れられた答えのわずかに異なるバージョンを作成しました。私はレイアウトxmlを変更せず、使用しませんでした。onTextResize()またはAutoResizeTextView、それが私の状況にとってやり過ぎのように思われたためです。デバイスの言語設定によって長い文字列が使用される場合は、LinearLayoutを水平方向から垂直方向に切り替える必要がありました。

レイアウト

<LinearLayout
    android:id="@+id/customer_care_bottom_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    android:layout_marginBottom="@dimen/lmargin_bottom_10">

    <TextView
        android:id="@+id/customer_care_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/CUSTOMER_CARE_TITLE" />

    <TextView
        android:id="@+id/customer_care_number_information"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/CUSTOMER_CARE_INFORMATION"/>
</LinearLayout>

Java

private void setCustomerServiceLayoutOrientationBasedOnTextWidth() {
        TextPaint paint = customer_care_number_text.getPaint();
        TextView tvCustomerCareTitle = (TextView) findViewById(R.id.customer_care_title);
        TextView tvCustomerCareInformation = (TextView) findViewById(R.id.customer_care_information);
        int halfCustomerServiceLayoutWidth = getScreenWidth() / 2;
        boolean isCustomerCareTitleTooLong = paint.measureText(tvCustomerCareTitle.getText().toString()) > customerServiceLayoutWidth;
        boolean isCustomerCareInformationTooLong = paint.measureText(tvCustomerCareInformation.getText().toString) > customerServiceLayoutWidth;

        if (isCustomerCareTitleTooLong || isCustomerCareInformationTooLong) {
            LinearLayout llCustomerCareBottom = (LinearLayout) findViewById(R.id.customer_care_bottom_layout);
            llCustomerCareBottom.setOrientation(LinearLayout.VERTICAL);
        }
    }

private int getScreenWidth() {
    int screenWidth;Display display = getWindowManager().getDefaultDisplay();
    if (Build.VERSION.SDK_INT < 13) {
        screenWidth = display.getWidth();
    } else {
        Point point = new Point();
        display.getSize(point);
        screenWidth = point.x;
    }
    return screenWidth;
}
于 2015-05-27T23:51:55.093 に答える