单击按钮时以编程方式将片段添加到活动

时间:2016-07-17 05:03:40

标签: android android-layout android-fragments

我想在单击按钮时以编程方式将片段添加到我的活动中。我的activity_main.xml布局有textViews,imageViews和一个按钮。当我点击该按钮时,我想用imageView打开一个片段。我现在的问题是,不是隐藏activity_main布局,而是在textViews和图像上方的小窗口中显示片段。我怎么能解决这个问题?`

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@android:color/holo_orange_light"
    android:layout_height="match_parent"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:orientation="vertical"
    android:weightSum="1">

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/frag_container">
    </FrameLayout>

    <AnalogClock
        android:dial="@drawable/clock_dial"
        android:hand_hour="@drawable/clock_hour_hand"
        android:hand_minute="@drawable/clock_minute_hand"
        android:id="@+id/clock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_weight="0.75" />

    <TextView
        android:id="@+id/date"
        android:layout_marginLeft="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_marginLeft="8dp"
        android:paddingTop="8dp"
        android:id="@+id/location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/sunrise"
        android:layout_marginLeft="8dp"
        android:paddingTop="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/sunset"
        android:layout_marginLeft="8dp"
        android:paddingTop="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sunset"
        android:textColor="@android:color/white"
        android:background="@android:color/black"
        android:id="@+id/button_sunset"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

我的片段布局:

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

    <FrameLayout
        android:id="@+id/sky"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.61"
        android:background="@color/blue_sky">

        <ImageView
            android:id="@+id/sun"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center"
            android:src="@drawable/sun"/>
    </FrameLayout>

    <FrameLayout
        android:id="@+id/sea"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.39"
        android:background="@color/sea">

    </FrameLayout>

</LinearLayout>

我的活动:

    public class MainActivity extends AppCompatActivity {

    @BindView(R.id.date)
    TextView mDate;
    @BindView(R.id.location)
    TextView mLocation;
    @BindView(R.id.sunrise)
    TextView mSunrise;
    @BindView(R.id.sunset)
    TextView mSunset;
    @BindView(R.id.button_sunset)
    Button buttonSunset;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        setSunsetButton();

    }

public void setSunsetButton() {

        buttonSunset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                SunsetFragment sunsetFragment = new SunsetFragment();
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction fragmentTransaction = fm.beginTransaction();
                fragmentTransaction.add(R.id.frag_container, sunsetFragment);
                fragmentTransaction.commit();
            }
        });    
    }
}

1 个答案:

答案 0 :(得分:2)

ibv_wcFrameLayout,其宽度和高度设置为Fragment,这就是它出现在一个小窗口中的原因。

最好用wrap_content替换Activity的整个内容视图,或者甚至打开一个包含片段的新Fragment并将宽度和高度设置为Activity