2011-06-23 9 views
5

3つのテキストビューを横に並べてレイアウトを作成しようとしています。テキストビューの長さは異なります。同じ幅のテキストビューを行に作成する

私がしたいのは、テキストの長さにかかわらず常にlayout_widthが同じになるように並べ替えることです。私が試した

アプローチ:

1)私はlinear_layoutを使用してtextviewsの重みを設定することが1であることを試みたが、すべてのtextViewsが配置された後、それは残りの幅のためにのみ適用されますので、それはそれをしません。

2)また、テーブルレイアウトを使用し、stretchColumns = "*"を使用してすべての列をストレッチしてみました。しかし、それはまたテキストの長さに必要な幅を割り当て、それだけで列を伸ばします。

3)これはハックですが、これも機能しません。私は3つのテキストビューを持つ相対的なレイアウトの中に線形レイアウトを持たせようとしましたが、テキストを持たずにウエイトを設定することで同じ幅になるようにしました。これはうまくいきますが、リニアレイアウト内のビューの右端と左端にアライメントするために相対レイアウト内にある次のビューが必要です。しかし、これは機能しません。ここに私が使ったレイアウトがあります。

 <RelativeLayout 
      android:layout_width="fill_parent" android:layout_height="fill_parent" > 
      <!-- This is a hack to have all three textviews in a row to obtain equal width --> 
      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
       <TextView android:id="@+id/tv_ref1" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref2" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
       <TextView android:id="@+id/tv_ref3" 
        android:layout_width="0dp" android:layout_height="wrap_content" 
        android:text="My ghghhfghjjghjkkhgfhfghfjhjh" 
        android:layout_weight="1.0" 
        android:gravity="center" /> 
      </LinearLayout> 


      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Text Text Text" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center_horizontal" 
       android:text="Med" 
       android:textColor="@color/white" /> 
      <TextView 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:layout_below="@id/tv_ref1" 
       android:gravity="center" 
       android:text="Long Text wtwy yu hjsyi" 
       android:textColor="@color/white" /> 

     </RelativeLayout> 

私は何が間違っているのか、どのように行のテキストビューを同じ幅にすることができるのか教えてください。

ありがとうございます。

答えて

22

設定layout_widthを意味する「fill_parent」とlayout_weight「1」に、すべてのTextEditsのために同じ幅のすべての使用の

+0

それは動作しません。私はそれを試してみました。それは他のテキストよりも長いテキストに幅を与えます。 – achie

+0

layout_widthが "wrap_content"の場合、yes;それが "fill_parent"であれば - いいえ。それを試してください –

+0

ああ私の悪い。はい、それは動作します。そして、私のレイアウトコード内のrelativelayout内のlinearlayoutのテキストビューでさえトリックを行います。したがって、すべてのtextviewに対してfill_parentまたは0dpのいずれかでも動作します。また、すべてのtextviewの幅を同じに設定すると効果的です。ありがとうございました。 – achie

0

なぜプロパティのmax width属性を使用しないでください。すべてtextviewsのために同じことを設定すると、20か30dip

+0

にその幅を設定します。このアプローチを使用して直面するもう1つの問題は、複数の画面密度、方向、および画面サイズをサポートする場合です。私はすべてのスクリーンファクタに対して別々のレイアウトファイルを作成し、それらのビューごとに異なる最大幅を設定したくありません。私はむしろ1つのレイアウトを使用して、すべてのケースで機能するようにします。しかし、助けてくれてありがとう。 – achie

0

まず持っているためにそれらを強制的に:

xmlns:android="http://schemas.android.com/apk/res/android" 

ルートレイアウトの場合は、LinearLayoutを閉じた後にtextViewを繰り返しているので、上記のコードを確認して変更してください。

+0

相対レイアウトは私のルートレイアウトではありません。だから私は私のルートレイアウトで名前空間の宣言をします。そして線形レイアウトは閉じられるべきであるので閉じられる。そのレイアウト内のtextviewsはちょうどハックです、それが動作すれば私は0dpに高さを設定します。 – achie

+0

なぜ、線形レイアウトを閉じた直後に3つのtextViewを使用したか。 LinearLayoutでTextViewsのレイアウトに影響を与えています。それらを削除し、それがうまく動作するかチェックしてください。 –

+0

いいえ、そうではありません。線形レイアウト外のテキストビューは、線形レイアウトのテキストビューのレイアウトに影響を与えません。彼らはそうしてはならず、彼らはそうしていない。私は自分のコードをテストしました。 – achie

0

はすべてtextviewsのうち、最大の幅を取得し、まあ、私はいつもtextviewsは、その長さのものであろうと言うことはできませんすべてのtextviews

@Override 
     public void onWindowFocusChanged(boolean hasFocus) { 
      // TODO Auto-generated method stub 
      super.onWindowFocusChanged(hasFocus); 
      // System.out.println("...111Height..."+mainLayout.getMeasuredHeight()); 

      width1 = textView1.getWidth(); 
    width2 = textView2.getWidth(); 
    width3 = textView3.getWidth(); 


    //get maximum width among all width 
    int[] nums={width1 ,width2 ,width3}; 
    Arrays.sort(nums); 
    int max = nums[nums.length-1]; 

    //set this maximum value to all the textviews 

    textView1.setWidth(max); 
    textView2.setWidth(max); 
    textView3.setWidth(max); 

    } 
関連する問題