Android 구성 요소 필수 TabHost 사용 방법 상세 설명
일반적으로 저 희 는 TabActivity 를 계승 하여 getTabHost()를 호출 하여 TabHost 인 스 턴 스 를 가 져 옵 니 다.다음은 구체 적 인 과정 입 니 다.
TabHostActivity.java
public class TabHostActivity extends TabActivity {
private TabHost tabHost;
private Intent certificateIntent;
private Intent feeIntent;
private Intent scoreIntent;
private Intent studyIntent;
private Intent moreIntent;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tabHost = getTabHost();
initIntent();
addSpec();
}
/**
* tab intent
*/
privatevoid initIntent() {
studyIntent = new Intent(this, StudyActivity.class);
scoreIntent = new Intent(this, ScoreActivity.class);
feeIntent = new Intent(this, FeeActivity.class);
certificateIntent = new Intent(this, CertificateActivity.class);
moreIntent = new Intent(this, MoreActivity.class);
}
/**
* tabHost
*/
privatevoid addSpec() {
tabHost.addTab(this.buildTagSpec("tab_study",
R.string.study_progress,R.drawable.account01, studyIntent));
tabHost.addTab(this.buildTagSpec("tab_score",
R.string.test_score,R.drawable.account02, scoreIntent));
tabHost.addTab(this.buildTagSpec("tab_fee",
R.string.fee_pay,R.drawable.account03, feeIntent));
tabHost.addTab(this.buildTagSpec("tab_certificate", R.string.certificate_grant,R.drawable.accountcertificateIntent));
tabHost.addTab(this.buildTagSpec("tab_more", R.string.more,
R.drawable.account05, moreIntent));
}
/**
*
* @param tagName
* @param tagLable
* @param icon
* @param content
* @return
*/
private TabHost.TabSpec buildTagSpec(String tagName, int tagLable,
int icon, Intent content) {
returntabHost
.newTabSpec(tagName)
.setIndicator(getResources().getString(tagLable),
getResources().getDrawable(icon)).setContent(content);
}}
운행 결 과 는 아래 그림 과 같다.우 리 는 탭 위치 가 인터페이스 위 에 있 는 것 을 발 견 했 지만,우리 가 본 많은 응용 탭 은 모두 인터페이스 아래 에 있다.
아래 그림 과 같다.
이 효 과 를 실현 하려 면 TabActivity 의 기본 레이아웃 을 덮어 쓰 면 됩 니 다.새 레이아웃 은 탭 과 탭 에 대응 하 는 내용 의 상대 적 인 위 치 를 바 꾸 기만 하면 됩 니 다.여 기 는 상대 적 인 레이아웃 으로 탭 에 대응 하 는 내용 의 위 치 를 탭 위 에 놓 습 니 다.id 를 변경 하지 마 십시오.onCreate()에 새 레이아웃 을 설정 해서 TabActivity 의 기본 레이아웃 을 덮어 쓰 는 것 을 잊 지 마 세 요.
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
tabHost = getTabHost();
initIntent();
addSpec();
}
tab.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- TabHost id -->
<TabHostxmlns:android=http://schemas.android.com/apk/res/android
android:id="@android:id/tabhost"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<RelativeLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- TabWidget id -->
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
</TabWidget>
<!-- FrameLayout ,id -->
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@android:id/tabs">
</FrameLayout>
</RelativeLayout>
</TabHost>
보통 프로젝트 에서 저 희 는 사용자 정의 Activity 기본 클래스 가 있 습 니 다.저 희 는 모든 인터페이스 Activity 로 하여 금 이 기본 클래스 를 계승 하 게 합 니 다.그러나 TabHost 를 사용 하려 면 TabActivity 를 계승 해 야 하기 때문에 우 리 는 두 개의 기본 클래스 를 정의 할 수 있 습 니 다.하 나 는 일반 Activity 인터페이스의 기본 클래스 이 고 다른 하 나 는 TabHost 인터페이스 를 포함 하 는 기본 클래스 입 니 다.이 기본 클래스 가 TabActivity 를 계승 하면 됩 니 다.2.TabHost 용법-Tab 태그 스타일 정의
1 절'TabHost 용법'에서 우 리 는 TabHost 를 통 해 탭 효 과 를 실현 하 는 것 을 소개 했다.그러나 실제 프로젝트 에서 우 리 는 자신의 Tab 태그 스타일 을 정의 하여 인터페이스 효 과 를 더욱 좋게 할 수 있 습 니 다.시스템 의 Tab 스타일 을 바 꿀 수 없 으 니 시스템 을 숨 기 는 것 을 선택 하고 자신 이 정의 하 는 것 을 사용 할 수 있 습 니 다.시 나 웨 이 보 의 프로젝트 를 역 컴 파일 하면 레이아웃 에 TabWidget 즉 Tab 탭 을 숨 기 고 RadioButton 으로 대체 하 는 것 을 발견 할 수 있 습 니 다.자신 이 정의 한 이상 스타일 을 표시 하기 로 결정 할 수 있 을 것 입 니 다.그러면 우리 의 문제 도 해 결 될 것 입 니 다.
여기 서 제 가 사용 하 는 것 은'TabHost 용법-두 가지 실현 방식'이라는 문 종이 언급 한 두 번 째 실현 방식 으로 Activity 를 계승 하여 TabHost 를 사용 하 는 것 입 니 다.먼저 코드 를 붙 여 라.
TabHostActivity.java
public class TabHostActivity extends Activity implements
OnCheckedChangeListener {
private TabHost tabHost;
private Intent certificateIntent;
private Intent feeIntent;
private Intent scoreIntent;
private Intent studyIntent;
private Intent moreIntent;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
// tabHost = getTabHost();
tabHost = (TabHost) findViewById(R.id.my_tabhost);
LocalActivityManager groupActivity =
new LocalActivityManager(this,false);
groupActivity.dispatchCreate(savedInstanceState);
tabHost.setup(groupActivity);
initIntent();
addSpec();
((RadioGroup) findViewById(R.id.tab_radiogroup))
.setOnCheckedChangeListener(this);
}
/**
* tab intent
*/
privatevoid initIntent() {
studyIntent = new Intent(this, StudyActivity.class);
scoreIntent = new Intent(this, ScoreActivity.class);
feeIntent = new Intent(this, FeeActivity.class);
certificateIntent = new Intent(this, CertificateActivity.class);
moreIntent = new Intent(this, MoreActivity.class);
}
/**
* tabHost
*/
privatevoid addSpec() {
tabHost.addTab(this.buildTagSpec("tab_study", R.string.study_progress,
R.drawable.account01, studyIntent));
tabHost.addTab(this.buildTagSpec("tab_score", R.string.test_score,
R.drawable.account02, scoreIntent));
tabHost.addTab(this.buildTagSpec("tab_fee", R.string.fee_pay,
R.drawable.account03, feeIntent));
tabHost.addTab(this.buildTagSpec("tab_certificate",
R.string.certificate_grant, R.drawable.account04,
certificateIntent));
tabHost.addTab(this.buildTagSpec("tab_more", R.string.more,
R.drawable.account05, moreIntent));
}
/**
*
* @param tagName
* @param tagLable
* @param icon
* @param content
* @return
*/
private TabHost.TabSpec buildTagSpec(String tagName, int tagLable,
int icon, Intent content) {
returntabHost
.newTabSpec(tagName)
.setIndicator(getResources().getString(tagLable),
getResources().getDrawable(icon)).setContent(content);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radio_button_study:
tabHost.setCurrentTabByTag("tab_study");
break;
case R.id.radio_button_score:
tabHost.setCurrentTabByTag("tab_score");
break;
case R.id.radio_button_certificate:
tabHost.setCurrentTabByTag("tab_certificate");
break;
case R.id.radio_button_fee:
tabHost.setCurrentTabByTag("tab_fee");
break;
case R.id.radio_button_more:
tabHost.setCurrentTabByTag("tab_more");
break;
}
}
}
tab.xml
<?xml version="1.0" encoding="UTF-8"?>
<TabHost android:id="@+id/my_tabhost" android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="0.0dip"
android:layout_weight="1.0" />
<TabWidget android:id="@android:id/tabs" android:visibility="gone"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="0.0" />
<RadioGroup android:id="@+id/tab_radiogroup"
android:background="@drawable/tabs_bg" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:gravity="center_vertical"
android:layout_gravity="bottom" android:orientation="horizontal">
<RadioButton android:id="@+id/radio_button_study"
android:layout_marginTop="2.0dip" android:text=" "
android:drawableTop="@drawable/account01" style="@style/tab_button_bottom"
android:checked="true" />
<RadioButton android:id="@+id/radio_button_score"
android:layout_marginTop="2.0dip" android:text=" "
android:drawableTop="@drawable/account02" style="@style/tab_button_bottom" />
<RadioButton android:id="@+id/radio_button_certificate"
android:layout_marginTop="2.0dip" android:text=" "
android:drawableTop="@drawable/account03" style="@style/tab_button_bottom" />
<RadioButton android:id="@+id/radio_button_fee"
android:layout_marginTop="2.0dip" android:text=" "
android:drawableTop="@drawable/account04" style="@style/tab_button_bottom" />
<RadioButton android:id="@+id/radio_button_more"
android:layout_marginTop="2.0dip" android:text=" "
android:drawableTop="@drawable/account05" style="@style/tab_button_bottom" />
</RadioGroup>
</LinearLayout>
</TabHost>
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- TabHost -->
<style name="tab_button_bottom">
<item name="android:textSize">12px</item>
<item name="android:textColor">#ffffffff</item>
<item name="android:ellipsize">marquee</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:background">@drawable/tab_btn_bg</item>
<item name="android:layout_marginTop">2.0dip</item>
<item name="android:button">@null</item>
<item name="android:paddingTop">6dip</item>
<item name="android:drawablePadding">4dip</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1.0</item>
<item name="android:singleLine">true</item>
</style>
<!-- LinearLayout -->
<style name="activity_title_background">
<item name="android:background">@drawable/title_background</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_alignParentTop">true</item>
<item name="android:gravity">center</item>
</style>
<!-- TextView -->
<style name="activity_title_text">
<item name="android:textSize">14dip</item>
<item name="android:textColor">@drawable/white</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center</item>
</style>
</resources>
운행 결 과 는 아래 그림 과 같다.프로그램의 중요 한 부분:
1. 빨간색 글씨체 부분.
2. 레이아웃 파일 tab.xml,이 레이아웃 파일 에서 TabWidget 을 숨 기 고 RadioGroup 으로 대체 하 는 것 을 볼 수 있 습 니 다.
3. RadioGroup 에 OnCheckedChangeListener 감청 을 설정 하고,onCheckedChanged 방법 을 통 해 각 RadioButton 클릭 이벤트 의 처 리 를 완료 하고 탭 전환 을 완료 합 니 다.
사실 나 는 애초에 왜 라디오 버튼 을 사용 해 야 하 는 지 일반적인 버튼 을 사용 하지 않 는 지 를 고려 한 적 이 있다.나중에 자신 이 프로젝트 를 하 는 것 을 통 해 RadioGroup 을 사용 하 는 것 이 다음 과 같은 장점 이 있다 는 것 을 알 게 되 었 습 니 다.
1.또한 레이아웃 이 비교적 편리 하고 이해 하기 쉬 우 므 로 LinearLayout 등 레이아웃 으로 Button 을 포함 하지 않 아 도 됩 니 다.
2.현재 선택 한 탭 을 쉽게 얻 을 수 있 습 니 다.물론 TabHost 의 tabHost.getCurrentTabTag()와 getCurrentTab()를 통 해서 도 가능 합 니 다.
3.감청 설정 이 편리 합 니 다.RadioGroup 에 감청 설정 만 하면 됩 니 다.프로그램 에 대응 하 는 코드 는?
((RadioGroup) findViewById(R.id.tab_radiogroup))
.setOnCheckedChangeListener(this);
Button 을 사용 하려 면 모든 Button 을 위해 하나씩 감청 을 설정 해 야 합 니 다.상대 적 으로 귀 찮 습 니 다.4. 아마도 가장 중요 한 것 은 RadioButton 자체 가 그림 과 문자 의 상하 구 조 를 지원 하기 때 문 일 것 입 니 다.그림 과 문자 가 무엇 인지 지정 하면 됩 니 다.우리 가 이런 구 조 를 실현 하지 않 아 도 됩 니 다.
<RadioButton android:id="@+id/radio_button_more"
android:layout_marginTop="2.0dip"
android:text=" "
android:drawableTop="@drawable/account05"
style="@style/tab_button_bottom" />
물론 만약 에 RadioButton 이 우리 의 프로젝트 수 요 를 만족 시 키 지 못 한다 면 예 를 들 어 우 리 는 그림 이 필요 하지 않 고 텍스트 가 아래쪽 에 표시 되 지 않 고 가운데 에 표시 되 기 를 원 하지 않 는 다 면 우 리 는 RadioButton 대신 다른 구성 요 소 를 사용 할 수 있다.사실 우 리 는 수정 이나 사용자 정의 등 방식 으로 여러 가지 아름 다운 효 과 를 실현 할 수 있다.예 를 들 어'인망'모 바 일 클 라 이언 트 의 개인 홈 페이지 에서 Tab 라벨 은 좌우 로 미 끄 러 질 수 있다.창작 자:남 자 는 바다 와 같다.
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.