nicolasdavid
nicolasdavid

Reputation: 2981

FrameLayout does not match_parent

I am using fragNav and bottombar plugin. I am trying to make a fullscreen fragment through a FrameLayout. By default, those plugins came with an actionBar which i delete in my theme with "Theme.AppCompat.Light.NoActionBar". But Once i did this there is still a white bar on top on my screen. When i look at hierarchyView it appears that my FrameLayout is not matching the parent but all my xml are setup with match_parent width and height..

MainActivity.java

public class MainActivity extends AppCompatActivity {

private BottomBar mBottomBar;
private FragNavController fragNavController;

private final int TAB_FIRST = FragNavController.TAB1;
private final int TAB_SECOND = FragNavController.TAB2;
private final int TAB_THIRD = FragNavController.TAB3;
private final int TAB_FOURTH = FragNavController.TAB4;


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


    List<Fragment> fragments = new ArrayList<>(4);

    fragments.add(FirstFragment.newInstance(0));
    fragments.add(SecondFragment.newInstance(0));
    fragments.add(ThirdFragment.newInstance(0));
    fragments.add(FourthFragment.newInstance(0));

        fragNavController = new FragNavController(getSupportFragmentManager(), R.id.container, fragments);

        //BottomBar menu
        mBottomBar = BottomBar.attach(this, savedInstanceState);
        mBottomBar.setItems(R.menu.bottombar_menu);
        mBottomBar.setOnMenuTabClickListener(new OnMenuTabClickListener() {
            @Override
            public void onMenuTabSelected(@IdRes int menuItemId) {
                //switch between tabs
                switch (menuItemId) {
                    case R.id.bottomBarItemOne:
                        fragNavController.switchTab(TAB_FIRST);
                        break;
                    case R.id.bottomBarItemSecond:
                        fragNavController.switchTab(TAB_SECOND);
                        break;
                    case R.id.bottomBarItemThird:
                        fragNavController.switchTab(TAB_THIRD);
                        break;
                    case R.id.bottomBarItemFourth:
                        fragNavController.switchTab(TAB_FOURTH);
                        break;
                }
            }

            @Override
            public void onMenuTabReSelected(@IdRes int menuItemId) {
                if (menuItemId == R.id.bottomBarItemOne) {
                    fragNavController.clearStack();
                }
            }
        });
    }

    @Override
    public void onBackPressed () {
        if (fragNavController.getCurrentStack().size() > 1) {
            fragNavController.pop();
        } else {
            super.onBackPressed();
        }
    }
    @Override
    protected void onSaveInstanceState (Bundle outState){
        super.onSaveInstanceState(outState);
        // Necessary to restore the BottomBar's state, otherwise we would
        // lose the current tab on orientation change.
        mBottomBar.onSaveInstanceState(outState);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/container"
    android:background="@color/black">
</FrameLayout>

FirstFragment.java

public class FirstFragment extends Fragment {

public class SwipeDeckAdapter extends BaseAdapter {

    private List<String> data;
    private Context context;

    public SwipeDeckAdapter(List<String> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        View v = convertView;
        if(v == null){
            LayoutInflater inflater = getActivity().getLayoutInflater();
            // normally use a viewholder
            v = inflater.inflate(R.layout.card_view, parent, false);
        }
        ((TextView) v.findViewById(R.id.textView2)).setText(data.get(position));

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String item = (String)getItem(position);
                Log.i("MainActivity", item);
            }
        });

        return v;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_home,container,false);

    final SwipeDeck cardStack = (SwipeDeck) view.findViewById(R.id.swipe_deck);
    cardStack.setHardwareAccelerationEnabled(true);

    Button btn = (Button) view.findViewById(R.id.undobutton);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            cardStack.swipeTopCardLeft(180);
        }
    });
    Button btn2 = (Button) view.findViewById(R.id.joinbutton);
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            cardStack.swipeTopCardRight(180);
        }
    });
    final ArrayList<String> testData = new ArrayList<>();
    testData.add("0");
    testData.add("1");
    testData.add("2");
    testData.add("3");
    testData.add("4");

    final SwipeDeckAdapter adapter = new SwipeDeckAdapter(testData, getActivity() );
    cardStack.setAdapter(adapter);

    cardStack.setEventCallback(new SwipeDeck.SwipeEventCallback() {
        @Override
        public void cardSwipedLeft(int position) {
            Log.i("MainActivity", "card was swiped left, position in adapter: " + position);
        }

        @Override
        public void cardSwipedRight(int position) {
            Log.i("MainActivity", "card was swiped right, position in adapter: " + position);
        }

        @Override
        public void cardsDepleted() {
            Log.i("MainActivity", "no more cards");
        }
        @Override
        public void cardActionDown() {
            Log.i("MainActivity", "Down");
        } ;

        @Override
        public void cardActionUp() {
            Log.i("MainActivity", "Up");
        };
    });
    return view;
}

public static FirstFragment newInstance(int index) {
    FirstFragment f = new FirstFragment();
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);
    return f;
}

}

fragment_first.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout                       xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/black"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="io.MainActivity"
android:fitsSystemWindows="true">

<com.daprlabs.cardstack.SwipeLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:swipedeck="http://schemas.android.com/apk/res-auto"
    android:id="@+id/framelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="10">


    <com.daprlabs.cardstack.SwipeDeck
        android:id="@+id/swipe_deck"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        swipedeck:card_spacing="0dp"
        swipedeck:max_visible="3"
        swipedeck:render_above="true"
        swipedeck:rotation_degrees="15"
        swipedeck:opacity_end="0.33">

    </com.daprlabs.cardstack.SwipeDeck>


    <RelativeLayout
        android:id="@+id/rl"
        android:layout_weight="2"
        android:layout_width="match_parent"
        android:layout_height="0dp">

        <RelativeLayout
            android:id="@+id/container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true">
            <Button
                android:id="@+id/undobutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Undo"
                android:onClick="onClick"/>

            <Button
                android:id="@+id/joinbutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@id/undobutton"
                android:text="Join"
                android:onClick="onClick"/>
        </RelativeLayout>

    </RelativeLayout>

</com.daprlabs.cardstack.SwipeLinearLayout>

The FrameLayout Parent that is Ok

The FrameLayout that is not matching the parent

you can see the white space on top (looks like an actionBar but it is not

Upvotes: 0

Views: 1332

Answers (1)

Ira Juneau
Ira Juneau

Reputation: 294

In your parent RelativeLayout in fragment_first can you remove the android:fitsSystemWindows="true", I think that may be the cause of the issue.

Upvotes: 0

Related Questions