카테고리 없음

android material 탭레이아웃

Machine_웅 2021. 4. 2. 12:26
728x90
반응형

xml 

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <data>

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".wMy_View.Dir_TabLayout.View_Tab_MainActivity">

        <!--    탭레이아웃     -->
        <!-- 그레이들에서 메터리얼 디자인 추가 필요 -->
        <!--    레이아웃의 높이가 수정이 안된다
            해결방법 :
            1) 직접 소스로 수정해줘버리기
            tab_layout.getLayoutParams().height
                = (int) getResources().getDimension(R.dimen.tablayout_view_h);
        -->

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            style="@style/AppTheme.TabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorHeight="5dp"
            app:tabTextAppearance="@style/tab_text"
            >

        </com.google.android.material.tabs.TabLayout>

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

    </LinearLayout>
</layout>

 

main

package com.appgrider.test_android.wMy_View.Dir_TabLayout;

import android.os.Bundle;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

import com.appgrider.test_android.R;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import static androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING;

public class View_Tab_MainActivity extends AppCompatActivity {


    ViewPager2 view_pager;
    TabLayout tab_layout;
    Adapter_Pager adapter_pager;

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

        // 뷰페이저 연결
        view_pager = findViewById(R.id.view_pager);
        view_pager.setOffscreenPageLimit(3); //  페이지 유지 갯수

        // 페이지 스크롤 막기
        view_pager.setUserInputEnabled(false);

/*        view_pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
                if (state == SCROLL_STATE_DRAGGING && view_pager.getCurrentItem() == 0) {
                    view_pager.setUserInputEnabled(false);
                } else {
                    view_pager.setUserInputEnabled(true);
                }
            }
        });*/

        // 뷰페이저 어댑터 연결
        adapter_pager = new Adapter_Pager(this);
        view_pager.setAdapter(adapter_pager);

        // tabLayout에 뷰페이저 연결
        tab_layout = findViewById(R.id.tab_layout);
        
        //  tabLayout 높이 조정
        tab_layout.getLayoutParams().height = (int) getResources().getDimension(R.dimen.tablayout_view_h);

        boolean auto_refresh = true;
        // TabConfigurationStrategy
        TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tab_layout, view_pager, auto_refresh,(tab, position) -> {
            switch (position){
                case 0 : {
//                    tab.setText("탭1");
//                    tab.setIcon(getResources().getDrawable(R.drawable.ico_1, null));
                    tab.setCustomView(R.layout.item_tab);
                    break;
                }
                case 1 : {
                    tab.setText("탭2");
                    tab.setIcon(getResources().getDrawable(R.drawable.ico_2, null));
                    break;
                }
                case 2 : {
                    tab.setText("탭3");
                    tab.setIcon(getResources().getDrawable(R.drawable.ico_3, null));
                    break;
                }
            }
        });
        tabLayoutMediator.attach();
    }


    public void main_fun(){
        Toast.makeText(this,"메인함수 호출",Toast.LENGTH_SHORT).show();
    }

}

 

* 기본 텍스트  , 배경 수정

 

    <style name="AppTheme.TabLayout" parent="Widget.MaterialComponents.TabLayout">
        <item name="android:background">#000</item>
        <item name="tabIndicatorColor">#f00</item>
    </style>

 

 

728x90
반응형