it-swarm.com.de

Das Auffüllen von Registerkarten kann nicht entfernt werden, wenn benutzerdefinierte Ansichten mit Registerkartenlayout verwendet werden

Ich habe ein relatives Layout in der benutzerdefinierten Ansicht hinzugefügt und dieses im Registerkartenlayout hinzugefügt. Ich verwende einen weißen Hintergrund für Registerkarten und habe im benutzerdefinierten Layout der Registerkarten keine Auffüllung vorgenommen. Aber dann bekomme ich auch Füllungen auf Registerkarten, aufgrund derer ich einen grauen Hintergrund in den Registerkarten sehe, als würde Android intern die Füllungen auf Registerkarten anwenden. Ich versuche, drei Textansichten anzuzeigen, die ich ausführen kann, aber eine davon wird aufgrund der Auffüllung auf Registerkarten abgeschnitten. Ich möchte auch eine konsistente Hintergrundfarbe für Registerkarten haben. 

Hier ist mein Layoutcode:

activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:context="com.customtablayoutapplication.HomeActivity">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />


    </Android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_home" />


</Android.support.design.widget.CoordinatorLayout>



fragment_home.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:theme="@style/AppTheme.AppBarOverlay"
    tools:context="com.customtablayoutapplication.HomeFragment"
    tools:showIn="@layout/activity_home">

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tabs"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:tabGravity="fill"
        app:tabMode="fixed" />

    <Android.support.v4.view.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</LinearLayout>


custom_tab.xml`enter code here`

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:background="@Android:color/white"
    Android:layout_height="match_parent"
    Android:layout_gravity="center">

    <TextView
        Android:id="@+id/total_request_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:text="12"
        Android:textAllCaps="false"
        Android:visibility="gone"
        Android:textColor="@color/colorPrimaryDark"
        Android:textSize="12sp" />


    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_centerVertical="true"
        Android:fitsSystemWindows="true"
        Android:gravity="center">

        <TextView
            Android:id="@+id/request_status"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:gravity="center"
            Android:text="New Request"
            Android:textAllCaps="false"
            Android:textColor="@color/colorPrimaryDark"
            Android:textSize="12sp" />

        <TextView
            Android:id="@+id/badge_icon"
            Android:layout_width="13dp"
            Android:layout_height="13dp"
            Android:layout_alignParentRight="true"
            Android:layout_alignTop="@id/request_status"
            Android:layout_marginLeft="-3dp"
            Android:layout_marginTop="15dp"
            Android:background="@drawable/circular_text_background"
            Android:clickable="false"
            Android:visibility="gone" />
    </RelativeLayout>


</RelativeLayout>


HomeFragment.Java

package com.customtablayoutapplication;

import Android.os.Bundle;
import Android.support.design.widget.TabLayout;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentManager;
import Android.support.v4.app.FragmentPagerAdapter;
import Android.support.v4.view.ViewPager;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.RelativeLayout;
import Android.widget.TextView;

import Java.util.ArrayList;
import Java.util.List;

/**
 * A placeholder fragment containing a simple view.
 */
public class HomeFragment extends Fragment {

    private ViewPager viewPager;
    private TabLayout tabLayout;

    public HomeFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

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

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) view.findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
        setUpTabIcons();
        return view;
    }

    private void setUpTabIcons() {
        RelativeLayout tabNewRequest= (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.custom_tab, null);
        TextView tabNewRequesttxt = (TextView) tabNewRequest.findViewById(R.id.request_status);
        tabNewRequesttxt.setText("New Request");
        tabLayout.getTabAt(0).setCustomView(tabNewRequest);

        RelativeLayout tabInProgress= (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.custom_tab, null);
        TextView tabInProgresstxt = (TextView) tabInProgress.findViewById(R.id.request_status);
        tabInProgresstxt.setText("In Progress");
        tabLayout.getTabAt(1).setCustomView(tabInProgress);

        RelativeLayout tabWorkDone= (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.custom_tab, null);
        TextView tabWorkDonetxt = (TextView) tabWorkDone.findViewById(R.id.request_status);
        tabWorkDonetxt.setText("Work Done");
        tabLayout.getTabAt(2).setCustomView(tabWorkDone);

        RelativeLayout tabDelivered= (RelativeLayout) LayoutInflater.from(getActivity()).inflate(R.layout.custom_tab, null);
        TextView tabDeliveredtxt = (TextView) tabDelivered.findViewById(R.id.request_status);
        tabDeliveredtxt.setText("Delivered");
        tabLayout.getTabAt(3).setCustomView(tabDelivered);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
        adapter.addFragment(new NewRequestFragment(), "New Request");
        adapter.addFragment(new InProgressFragment(), "In Progress");
        adapter.addFragment(new WorkDoneFragment(), "Work Done");
        adapter.addFragment(new DeliveredFragment(), "Delivered");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

Fixed Tab haben grauen Hintergrund um weißen Hintergrund

20
user3492435
 <Android.support.design.widget.TabLayout
            Android:id="@+id/tab_layout"
            Android:layout_width="210dp"
            Android:layout_height="28dp"
            Android:layout_centerInParent="true"
            Android:background="@drawable/bg_forum_tab"
            app:tabIndicatorColor="@color/colorBtnBg"
            app:tabIndicatorHeight="0dp"
            app:tabPaddingBottom="-1dp"
            app:tabPaddingEnd="-1dp"
            app:tabPaddingStart="-1dp"
            app:tabPaddingTop="-1dp"
            app:tabSelectedTextColor="@color/colorBtnBg"
            app:tabTextColor="@color/colorWhite" />

Stellen Sie tabPaddingStart/tabPaddingEnd/tabPaddingTop/tabPaddingBottom so ein.

44
Kyrie Liu

Es hat für mich funktioniert:

In Ihrer TabLayout müssen Sie tabPaddingEnd und tabPaddingStart auf 0dp setzen.

In Ihrer benutzerdefinierten Ansicht müssen Sie layout_width und layout_height auf match_parent setzen, um den gesamten Bereich mit Ihrer benutzerdefinierten Farbe zu füllen.

Das TabLayout:

<Android.support.design.widget.TabLayout
    Android:id="@+id/tl_dashboard"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:layout_alignParentBottom="true"
    app:tabGravity="fill"
    app:tabIndicatorColor="@color/colorRed"
    app:tabMode="fixed"
    app:tabPaddingStart="0dp"
    app:tabPaddingEnd="0dp"/>

Und benutzerdefinierte Ansicht:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
     <!--Your widgets-->        
</RelativeLayout>
34
Miguel Garcia

Über XML können Sie nur die linken und rechten Auffüllungen wie folgt entfernen:

 app:tabPaddingEnd="0dp"
 app:tabPaddingStart="0dp"

Beachten Sie, dass dieser Weg für TOP- und BOTTOM-Polsterungen nicht funktioniert, aber ich finde die nächste Lösung:

Wenn Sie benutzerdefinierte Ansichten als Registerkartenelement verwenden, müssen Sie LayoutParams auf die Ansicht einstellen und die Füllungen 0 festlegen.

    for (int i = 0; i < tabLayout.getTabCount(); i++) {           
        View tabView = LayoutInflater.from(context)
              .inflate(LayoutInflater.from(this), R.layout.item_main_tabview, null, false);

        tabView.setLayoutParams(new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        tabView.setPadding(0, 0, 0, 0);
        tabLayout.getTabAt(i).setCustomView(tabViewBinding.getRoot());
    }

Ich habe dieses Problem gelöst, indem ich den Rand und die Auffüllung des übergeordneten Elements Ihrer benutzerdefinierten Ansicht auf Null gesetzt habe, wenn Sie dem Tab-Layout neue Registerkarten hinzufügen.

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    lp.setMargins(0,0,0,0);

    TabLayout.Tab newTab = mTabsBottom.newTab().setCustomView(R.layout.view_custom_tab);
    setupTabParentLayout(newTab.getCustomView(), lp);
    ..
    ..
    ..
    private void setupTabParentLayout(View customView, LinearLayout.LayoutParams lp)
    {
        LinearLayout tabParent = (LinearLayout) customView.getParent();
        tabParent.setLayoutParams(lp);
        tabParent.setPadding(0,0,0,0);
    }

Der Trick bestand darin, LinearLayout.LayoutParams für das übergeordnete Element der benutzerdefinierten Ansicht zu verwenden.

3
Swas_99

Für den Fall, dass Sie viele Dinge ausprobiert haben und keine davon funktioniert hat, habe ich am Ende Folgendes getan: Einfach einstellen

Android: layout_height = "20dp

<FrameLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <androidx.viewpager.widget.ViewPager
        Android:layout_width="match_parent"
        Android:layout_gravity="bottom"
        Android:layout_height="130dp"/>

    <com.google.Android.material.tabs.TabLayout
        Android:layout_height="20dp"
        Android:layout_width="match_parent"
        Android:layout_gravity="bottom"
        app:tabBackground="@drawable/tab_selector"
        app:tabGravity="center"
        app:tabIndicatorHeight="0dp"/>

</FrameLayout>
0
deslomator

Ich weiß, das ist eine alte Frage, aber das kann jemand anderem helfen. Auffüllanfang und Auffüllende entfernen nicht den Abstand zwischen den Vorsprüngen. Lösung ist:

Android: clipToPadding = "true"

 <Android.support.design.widget.TabLayout
        Android:id="@+id/tab_layout"
        Android:layout_width="match_parent"
        Android:layout_height="80dp"
        Android:background="@color/colorGrayBackground"
        app:tabGravity="fill"
        app:tabPaddingStart="0dp"
        app:tabPaddingEnd="0dp"
        app:tabContentStart="0dp"
        app:tabIndicatorHeight="0dp"
        Android:clipToPadding="true"
        app:tabMode="fixed" />

Dann können Sie die Auffüllung auf "0dp" setzen. Hoffe es hilft jemandem. 

0
dcanbatman
        <Android.support.design.widget.TabLayout
            Android:id="@+id/tabview"
            app:layout_constraintTop_toBottomOf="@+id/ivpromo"
            Android:layout_width="0dp"
            app:tabMode="scrollable"
            app:tabIndicatorHeight="0dp"
            app:tabContentStart="0dp"
            Android:clipToPadding="true"
            app:tabMaxWidth="45dp"
            app:tabGravity="fill"
            app:tabPaddingStart="0dp"
            app:tabPaddingEnd="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:tabIndicatorColor="@Android:color/transparent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/tvcode"
            Android:layout_height="40dp"/>
0
V Srinath