Как настроить панель вкладок в android, например, вкладки веб-браузера Google chrome - PullRequest
0 голосов
/ 18 апреля 2020

Я попытался настроить вкладку, создав выбранный и невыбранный чертеж, но не смог получить результат

Ниже приведено изображение панели вкладок, которую я хочу достичь Tab bar that i want to achieve

Что я сделал

tab_bar_selected. xml drawable

<?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

     <item android:bottom="-3dp">
       <shape android:shape="rectangle">
          <stroke android:color="#ff0000" android:width="2dp"/>
       </shape>
     </item>
  </layer-list>

tab_bar_unselected. xml drawable

<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

      <item android:top="-4dp"
            android:right="-4dp"
            android:left="-4dp">
         <shape android:shape="rectangle">
           <stroke android:color="#ff0000" android:width="2dp"/>
         </shape>
      </item>
   </layer-list>

tab_selector. xml

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <!-- Non focused states -->
  <item
   android:state_focused="false"
   android:state_selected="false"
   android:state_pressed="false"
   android:drawable="@drawable/tab_bar_unselected" />
  <item
   android:state_focused="false"
   android:state_selected="true"
   android:state_pressed="false"
   android:drawable="@drawable/tab_bar_selected" />
   <!-- Focused states -->
</selector>

tab_bar_activity. xml файл макета

<?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      android:background="@color/colorPrimary"
      android:gravity="center_vertical"
      app:layout_collapseMode="pin"
      app:layout_scrollFlags="scroll|enterAlways"
      app:title="@string/app_name"/>

    <com.google.android.material.tabs.TabLayout
      android:id="@+id/tabLayout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:minHeight="?actionBarSize"
      app:tabGravity="fill"
      app:tabIndicator="@null"
      app:tabBackground="@drawable/tab_selected_drawable"
      app:tabMode="fixed">
    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
      android:id="@+id/viewPager"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    </androidx.viewpager.widget.ViewPager>
 </LinearLayout>

Класс TabBarActivity и TabAdapter

public class TabBarsActivity extends AppCompatActivity {

private TabAdapter adapter;
private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabbar_activity);
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    adapter = new TabAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment1(), "Tab 1");
    adapter.addFragment(new Fragment2(), "Tab 2");
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

   }
 }

   class TabAdapter extends FragmentStatePagerAdapter {
     private final List<Fragment> mFragmentList = new ArrayList<>();
     private final List<String> mFragmentTitleList = new ArrayList<>();
    TabAdapter(FragmentManager fm) {
    super(fm);
    }
   @Override
   public Fragment getItem(int position) {
    return mFragmentList.get(position);
   }
  public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
  }
@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return mFragmentTitleList.get(position);
}
@Override
public int getCount() {
    return mFragmentList.size();
  }
}

вывод вышеуказанного кода

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...