2016-11-09 4 views
1

タイトルのTextViewが上部にあり、次にListViewにTextViewsが含まれるLinearLayoutがあります。これは、その中にGridViewがある別の同様のLinearLayoutの隣にあります。TextViewでのListViewは、ラップするテキストのみを中心にしています

長すぎるためにテキストが折り返されない限り、リストビュー内のTextViewは中央になりません。

私はListViewの幅を固定していましたが、折り返しても長い行の両端でテキストが途切れてしまったという副作用がありました。ちょうど適切にラップされませんでした。そこで、ハードコーディングされた幅を囲むLinearLayoutまで移動させることで修正しましたが、今はこの問題があります。

興味深いことに、似たようなGridViewには問題がないようですが、丸い角のある矩形である「背景描画可能」もあります。

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

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:weightSum="3"> 

    <LinearLayout 
     android:id="@+id/course_part" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="@string/course" 
      android:textSize="@dimen/text_course_title" 
      android:textColor="#ff000000" 
      android:textStyle="bold" /> 

     <ListView 
      android:id="@+id/listview_course" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"/> 
    </LinearLayout> 

とリストビューを移入するのTextViewさ:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/list_item_mark_name_name" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:fontFamily="Roboto" 
     android:textAlignment="center" 
     android:text="name" 
     android:textColor="#ff000000" 
     android:textSize="@dimen/text_course_grid" 
     android:textStyle="bold" 
     android:typeface="monospace" 
/> 

そして私は、私は動的に基づいて、私のArrayAdapter「getViewメソッド」でフォントサイズを変更することに注意すべきですテキストの長さ:

// First shrink it's size to better fit. 
    float textSize = 30; // In DP units. 
    int nameLength = mark.name.length(); 
    if (nameLength > 4) 
    { 
     if (nameLength <= 8) 
      textSize *= 4.0f/nameLength; // Up to 8, proportionally shrink it. 
     else 
      textSize *= 0.5f;    // After 8, leave it at half size. 
    } 

    holder.textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize); 
    holder.textView.setMinHeight(this.textViewPixels); 
    holder.textView.setText(mark.name); // Set it's name. 
    holder.textView.setTextColor(appData.getNightMode() ? Color.WHITE : Color.BLACK); // Just added it. Set it's color properly. 

私はgravity = "center"とtextAlignmeを試しましたnt = "center"であり、両方とも同じように動作します。

さまざまなビュー/レイアウトにさまざまな組み合わせのmatch_parentとfill_parentを組み合わせて試してみましたが、通常は悪い結果が出ました。もし幅をハードワイヤリングしなければ、あまりにも多くのスペースや非常に薄い無駄なカラムになります。

ありがとうございます!

+0

try android:gravity = "center_horizo​​ntal" –

+0

試してみました。喜びはありません。 –

答えて

0

回避方法が見つかりました:囲むLinearLayoutをRelativeLayoutに変更しました。

これがなぜうまくいくのでしょうか。ライブラリのバグのようなにおいがする。

ここで私の更新されたレイアウトは、タイトルTextViewを中心にするためにわずかに変更されました。 ListViewで使用されるTextViewに変更はありません。

<RelativeLayout 
     android:id="@+id/course_part" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/course_course_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="@string/course" 
      android:gravity="center" 
      android:textSize="@dimen/text_course_title" 
      android:textColor="#ff000000" 
      android:textStyle="bold" /> 

     <ListView 
      android:id="@+id/listview_course" 
      android:layout_below="@id/course_course_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"/> 
    </RelativeLayout> 
関連する問題