FrameLayout不匹配_parent

时间:2016-09-12 16:01:54

标签: java android xml

我正在使用fragNav和bottombar插件。我试图通过FrameLayout制作一个全屏片段。默认情况下,这些插件带有一个actionBar,我在主题中用“Theme.AppCompat.Light.NoActionBar”删除它。但是,一旦我这样做,我的屏幕上仍然有一个白色条。当我查看hierarchyView时,看起来我的FrameLayout与父级不匹配,但我的所有xml都设置为match_parent的宽度和高度..

  

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

1 个答案:

答案 0 :(得分:0)

在你父亲的fragment_first中的RelativeLayout你可以删除android:fitsSystemWindows =&#34; true&#34;,我认为这可能是问题的原因。