不显示将视图添加到Framelayout

时间:2016-09-01 09:53:33

标签: android android-custom-view android-framelayout

  

我正在尝试创建一个包含Button和ImageButton 的自定义 FrameLayout。它的xml是

<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>

我想要一个包含此buttonImageButton的布局。所以我创建了一个自定义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);


    }
}

我已将ImageButton和按钮添加到FrameLayout但未显示。我怎样才能layout_weight = 1给这个FrameLayout

3 个答案:

答案 0 :(得分:0)

只需在框架布局中创建一个线性布局,并为其添加布局权重,这将解决您的问题。

答案 1 :(得分: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);
         .....

答案 2 :(得分:0)

layout_weight仅在其父级为LinearLayout时才有效。在您的情况下,重量不起作用,并且您已将宽度设置为0 dp,这使视图不可见。

android:layout_width更改为wrap_content将显示该视图。

希望这有帮助。