2

ボタンとテキストビューを使用して、棒グラフのような構造を作成しています。

各バーの上に特定の値を表示したい。

値が 4 桁以内の場合は正しく表示されますが、すぐに 5 桁の no. 下のスクリーンショットに示すように、テキストが折り返されます。

試してみましandroid:singleLine="true"たが、何も変わりません。

スクリーンショット

レイアウト:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SeekBar
        android:id="@+id/seekBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:maxHeight="9dp"
        android:minHeight="9dp"
        android:padding="10dp"
        android:max="100"
        android:progressDrawable="@drawable/seekbar_progress"
        android:thumb="@drawable/shine_btn" />

    <TextView
        android:id="@+id/tvValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"        
        android:layout_alignRight="@id/seekBar"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="30dp" />

    <LinearLayout
        android:id="@+id/Graph01"
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_below="@id/seekBar"
        android:layout_marginTop="50dp"
        android:gravity="bottom"
        android:orientation="vertical"
        android:weightSum="1" >

        <com.example.calci.views.MyTextView
            android:id="@+id/tvGraph01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="5dp" />        
        <Button
            android:id="@+id/btnGraph01"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="0.1"                        
            android:background="#99f" />                
    </LinearLayout>


    <LinearLayout
        android:id="@+id/Graph02"
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_below="@id/seekBar"
        android:layout_marginTop="50dp"
        android:layout_toRightOf="@id/Graph01"
        android:gravity="bottom"
        android:orientation="vertical"
        android:weightSum="1" >

        <com.example.calci.views.MyTextView
            android:id="@+id/tvGraph02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="5dp" />

        <Button
            android:id="@+id/btnGraph02"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="0.1"
            android:background="#9f9" />
    </LinearLayout>

<!-- AND SO ON... -->
<RelativeLayout />

アクティビティ:

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromTouch) {
lp = new LinearLayout.LayoutParams(new ViewGroup.MarginLayoutParams(20,
            LinearLayout.LayoutParams.WRAP_CONTENT));
    lp.setMargins(55, 0, 0, 0);
    tvGraph01.setLayoutParams(lp);
    tvGraph01.setTextSize(6);
    tvGraph01.setGravity(Gravity.CENTER);

    lp = new LinearLayout.LayoutParams(new ViewGroup.MarginLayoutParams(20,
            LinearLayout.LayoutParams.WRAP_CONTENT));
    lp.setMargins(2, 0, 0, 0);
    tvGraph02.setLayoutParams(lp);
    tvGraph02.setTextSize(6);
    tvGraph02.setGravity(Gravity.CENTER);

lp = new LinearLayout.LayoutParams(20, 0, 0.0002f * 2 * progress * 20);
    lp.setMargins(55, 0, 0, 0);
    btnGraph01.setLayoutParams(lp);

    lp = new LinearLayout.LayoutParams(20, 0, 0.0002f * 2 * progress * 15);
    lp.setMargins(2, 0, 0, 0);
    btnGraph02.setLayoutParams(lp);
               }
    });

MyTextView

public class MyTextView extends TextView {
@Override
    protected void onDraw(Canvas canvas) {
        canvas.save();
// RORARING the textbox as I want to show text at right angle.
        canvas.rotate(270, getWidth() / 2, getHeight() / 2);
        super.onDraw(canvas);
        canvas.restore();
    }
}

この背後にある主な理由は、テキストビューの高さを 20 に設定していると思います。
テキストビューの高さを上げてみましたが、ボタン間のスペースが増えます。
重力のさまざまな値を試しましたが、それもうまくいきません。

どんな助けでも感謝します...

編集

1)。から何でも。android:singleLine="true"またはandroid:ellipsize="end"、テキストの折り返しに...android:maxLines="1"を入れたくないので、私の目的のためには機能しません。 全文を表示したい。

2)。すべてのボタンの高さの増加を除けば、に設定android:layout_height="300dp"してLinearLayoutも違いはありませんでした。

3)。コードで高さと幅を設定しているため、に設定android:layout_height="150dp"してTextViewも違いはありませんでした。

4

5 に答える 5

1

レイアウトの幅と高さを提案可能に変更し、それが機能することを確認します

 android:layout_width="40px" 
android:layout_height="wrap_content"
于 2012-12-18T07:47:49.830 に答える
1

これを試して :

レイアウトに固定の高さを割り当てていlinear graphます。

これの代わりに:

android:layout_height="200dp"

これを使って:

android:layout_height="300dp" or
android:layout_height="wrap_content"

お役に立てば幸いです。

ありがとう。

于 2012-12-18T07:35:02.047 に答える
1

これを TextView に追加します

android:singleLine="true" android:ellipsize="end"

テキストデータが複数行の場合は「...」が追加されますが、TextView の幅をいくつかの値に設定する必要があることを確認してください。幅をラップコンテンツとして保持する必要がある場合は、いくつかの値でパディングを設定します。それを試してみてください。!

于 2012-12-18T07:59:32.880 に答える
1
Try this,

   android:layout_height="150dp"
   android:layout_width="wrap_content"
   android:maxLength="5"
于 2012-12-18T08:02:35.627 に答える
0

One important change which was required : changing android:layout_toRightOf="@id/Graph01 in LinearLayout with id Graph02 to android:layout_toRightOf="@id/tvGraph01"

i.e. even if textview width increases, corresponding linearlayout won't be affected.

Also, I have to set margins for tvGraph02,btnGraph02,etc. after increasing width of textview in code.

于 2012-12-19T10:07:18.450 に答える