본문 바로가기

애니리뷰

액션바를 자바코드만으로 구현

package com.example.helloandroid;

import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;

@SuppressWarnings("deprecation")

//java코드만을 이용해 액션바 구성하기
public class MainActivity extends
AppCompatActivity implements ActionBar.TabListener {

ActionBar.Tab tabCon1, tabCon2, tabCon3;

protected void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState);

ActionBar bar=getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

tabCon1=bar.newTab();
tabCon1.setText("치와와");
tabCon1.setTabListener(this);
bar.addTab(tabCon1);

tabCon2=bar.newTab();
tabCon2.setText("친한");
tabCon2.setTabListener(this);
bar.addTab(tabCon2);

tabCon3=bar.newTab();
tabCon3.setText("마망");
tabCon3.setTabListener(this);
bar.addTab(tabCon3);
}

//탭을 선택하게 되면 작동하는 메소드, 위에서 액셔바를 3개 선언했으므로 3개가 있음
MyTabFragment myFrags[]=new MyTabFragment[3];
//MyTabFragment 배열의 선언. 3개의 프래그먼트가 있으니, 배열은 3
@Override
//탭을 선택하면 동작하는 코드
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
MyTabFragment myTabFrag=null;
//현재 섲택한 화면으로 사용할 변수 myTabFrag

//선택한 탭이 기존에 한 번도 선택된 적이 없다면, 프래그먼트를 생성해
//1행에서 선언한 myFrags[]의 위치에 넣는다
if(myFrags[tab.getPosition()] == null) {
myTabFrag = new MyTabFragment();

//현재 프래그먼트의 값을 지정, 그 선택한 탭의 텍스트를 tabMame
//변수에 저장. 저장된 값은 아래 클래스의 Bundle data, tabName에 사용됨
Bundle data= new Bundle();
data.putString("tabName", tab.getText().toString());
myTabFrag.setArguments(data);

//생성한 프래그먼트를 프래그먼트 배열의 해당 위치에 저장
myFrags[tab.getPosition()] = myTabFrag;
}
//기존에 해당 탭을 선택한 적이 있다면, 이를 재사용
else
myTabFrag=myFrags[tab.getPosition()];

//새로 생성했거나 기존 프래그먼트를 액션바 아래쪽 화면에 출력
ft.replace(android.R.id.content, myTabFrag);
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

}

//탭을 클릭하면 아래에 해당 프래그먼트들이 나오도록 코딩
//프래그컨트를 상속받는 mtyabfragment클래스를 내부 클래스로 생성
public static class MyTabFragment extends androidx.fragment.app.Fragment
{
String tabName;
public void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState);
Bundle data= getArguments();
tabName=data.getString("tabMame");
//3개의 탭을 클릭할 때마다 다른 프래그먼트(화면)가 나오도록,
//탭을 클릭할 때 지정한 데이터로 각 프래그먼트를 지정
//위에선 탭의 이름(텍스트)를 기준으로 한다(getString)
}

//프래그먼트에 나타날 화면을 구성. 최종적으로 return baseLayout:구성한 화면 반환
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//빈 리니어레이아웃을 java코드로 생성
LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);

LinearLayout baseLayout = new LinearLayout(super.getActivity());
baseLayout.setOrientation(LinearLayout.VERTICAL);
baseLayout.setLayoutParams(params);

if(tabName == "치와와")
baseLayout.setBackgroundColor(Color.RED);
if(tabName=="마망")
baseLayout.setBackgroundColor(Color.GREEN);
if(tabName=="친한")
baseLayout.setBackgroundColor(Color.BLUE);

return baseLayout;
}
}
}