2017-01-13 7 views
0

ボタンをプログラムで追加しようとしています。しかし何らかの理由で長いテキストが私の線形レイアウトでボタン全体を押し下げてしまいます。長いテキストは、直線レイアウトでボタンを押し下げます

problem これは私がこの動作を複製するために使用するコードです。

ボタン:

public class MyButton : Button 
    { 
     public MyButton(Context ctx) : base(ctx) 
     { 
      SetTextColor(Color.White); 
      SetTextSize(Android.Util.ComplexUnitType.Dip, 20); 
      var llp = new LinearLayout.LayoutParams(0, 100, 1); 
      llp.SetMargins(4, 0, 4, 4); 
      LayoutParameters = llp; 
      SetBackgroundColor(Color.Black); 
     } 
    } 

行:

public class MyHeader : LinearLayout 
    { 
     public MyHeader(Context context, IAttributeSet set) : base(context, set) 
     { 
      Orientation = Orientation.Vertical; 
      LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent, 0); 
     } 

     protected override void OnAttachedToWindow() 
     { 
      base.OnAttachedToWindow(); 
      Draw(); 
     } 

     private void Draw() 
     { 
      for (int r = 0; r < 2; r++) 
      { 
       var row = new MyRow(Context); 
       for (int i = 0; i < 4; i++) 
       { 
        var btn = new MyButton(Context); 
        if (r == 0 && i == 0) 
         btn.Text = "long text long text long text "; 
        else 
         btn.Text = $"Btn {r}.{i}"; 
        row.AddView(btn); 
       } 
       AddView(row); 
      } 
     } 
    } 

そして、私はXAMLのヘッダを追加する:

public class MyRow : LinearLayout 
    { 
     public MyRow(Context context) : base(context) 
     { 
      if (LayoutParameters == null) 
       LayoutParameters = GenerateDefaultLayoutParams(); 
      LayoutParameters.Height = ViewGroup.LayoutParams.WrapContent; 
      LayoutParameters.Width = ViewGroup.LayoutParams.MatchParent; 
      ((LinearLayout.LayoutParams)LayoutParameters).Gravity = GravityFlags.Top; 
      ((LinearLayout.LayoutParams)LayoutParameters).Weight = 0; 
      Orientation = Orientation.Horizontal; 
     } 
    } 

ヘッダ(Iボタンの2つの行を有します)このように:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="25px" 
    android:minHeight="25px"> 
    <App1.Resources.layout.MyHeader 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/myHeader1" /> 
</LinearLayout> 

私はボタンの内容がボタンの位置を移動すべきではないことがわかります。しかしそれはそうです。何か案は?あなたのボタンを

答えて

0

このように、LinearLayoutは、テキスト(?)の位置またはコンポーネントの内容に基づいてコンポーネントをレイアウトするように、明らかに機能します。

すべてのボタンのテキストは、画像内で一列に並んでいます。これを修正するには、MyRowのコンストラクタに

SetGravity(GravityFlags.CenterVertical); 

を追加しました。

0

setEllipsize(TextUtils.TruncateAt.MARQUEE)を追加します。

+0

追加しようとしました Ellipsize = Android.Text.TextUtils.TruncateAt.Marquee;ボタンは ですが、残念ながらその動作は同じです。 – Evelie

関連する問題