2016-09-01 17 views
0

ボタンとImageButtonを含むカスタムFrameLayoutを作成しようとしています。これは、XMLが、私はこのbuttonImageButton。だからと1つのレイアウトをしたいFramelayoutへのビューの追加が表示されない

<FrameLayout 
     android:id="@+id/frame_one" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"> 

     <Button 
      android:id="@+id/tab_btn_one" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/viewed_sep_bg_border" 
      android:gravity="center" 
      android:text="Video" 
      android:textColor="@android:color/black" 
      android:textSize="14sp" /> 

     <ImageButton 
      android:id="@+id/tab_tick_one" 
      android:layout_width="35dp" 
      android:layout_height="35dp" 
      android:layout_gravity="right" 
      android:layout_marginRight="-4dp" 
      android:layout_marginTop="-4dp" 
      android:background="@android:color/transparent" 
      android:src="@drawable/slanted_tick_green" 
      android:visibility="gone" /> 
    </FrameLayout> 

私はカスタムFrameLayoutを作成したが、それは何も表示されていないあるのです。占有スペースのみ。

public class TabFrameLayout extends FrameLayout { 
    private TabFrameLayout mTabFrameLayout; 
    private Button txtButton; 
    private ImageButton ibTick; 

    public TabFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(context); 
    } 

    public TabFrameLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(context); 
    } 

    public TabFrameLayout(Context context) { 
     super(context); 
     init(context); 
    } 

    private void init(Context context) { 
     mTabFrameLayout = this; 

     FrameLayout.LayoutParams frageParams = new FrameLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, 
       FrameLayout.LayoutParams.WRAP_CONTENT); 

     mTabFrameLayout.setLayoutParams(frageParams); 

     setBackgroundColor(Color.RED); 
     txtButton = new Button(context); 
     txtButton.setGravity(Gravity.CENTER); 
     txtButton.setTextSize(24); 
     txtButton.setTextColor(Color.BLACK); 
     txtButton.setText("txtButton"); 
     txtButton.setBackgroundResource(R.drawable.viewed_sep_bg_border); 

     LayoutParams buttonParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
     txtButton.setLayoutParams(buttonParams); 

     ibTick = new ImageButton(context); 
     ibTick.setBackgroundColor(Color.TRANSPARENT); 
     ibTick.setImageResource(R.drawable.slanted_tick_green); 

     FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) ibTick.getLayoutParams(); 
     //params.setLayoutDirection(L); 
     params.height = 50; 
     params.width = 50; 
     params.setMargins(0, -4, -4, 0); 
     params.gravity = Gravity.RIGHT | Gravity.TOP; 

     //params.weight = 1.0f; 
     //params. 
     ibTick.setLayoutParams(params); 


     mTabFrameLayout.addView(txtButton); 
     mTabFrameLayout.addView(ibTick); 
     mTabFrameLayout.invalidate(); 


     /*RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)txtButton.getLayoutParams(); 
     params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);*/ 
     //params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); 


    } 
} 

私はFrameLayoutImageButtonとボタンを追加したが、表示されません。そして、FrameLayoutにどうすればlayout_weight = 1を与えることができますか?

+0

'FrameLayout'の代わりに' RelativeLayout'を使用してください。 – Ironman

+0

しかし、FrameLayoutで1つの作業を行うことができれば、なぜRelativeLayoutのような重いレイアウトを使うのでしょうか。方法が必要です。 – Nepster

答えて

0

フレームレイアウト内に線形レイアウトを作成し、レイアウトの重みを追加するだけで問題を解決できます。

+0

オーバーヘッドです。上記のレイアウトはタブボタン用であり、プログラムでLinearLayoutに追加する必要があります。そして何かがxmlを介して行われた場合。それはprogrammatically.Andあなたの提案のおかげで作成する必要があります – Nepster

+0

私はそれが線形レイアウトをプログラムで作成し、重量を割り当てる方が良いと思います。 – raasesh

+0

同じパフォーマンスはありません。そして、私はプログラムでそれを行うことは、XML経由で行うよりも多くの時間がかかると思います – Nepster

0

プロパティを設定する前にsetLayoutParamsが必要です。これは、ビューの親がビューに割り当てるサイズを知る必要があるためです。

 //Create Button 
    txtButton = new Button(context); 
    LayoutParams buttonParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    txtButton.setLayoutParams(buttonParams); 
    txtButton.setGravity(Gravity.CENTER); 
    txtButton.setTextSize(24); 
     ...... 
    //Create ImageView 
    ibTick = new ImageButton(context); 
    LayoutParams imageParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    ibTick.setLayoutParams(imageParams); 
    ibTick.setBackgroundColor(Color.TRANSPARENT); 
     ..... 
0

layout_weightは、その親がLinearLayout場合にのみ動作します。あなたのケースでは、体重が機能していないし、幅を0 dpに設定すると、ビューが見えなくなります。

android:layout_widthからwrap_contentに変更すると表示されます。

これが役に立ちます。

関連する問題