0
我想創建一個標籤(可能使用TabHost)的活動,看起來是這樣的:需要幫助創建一個自定義TabHost
這種佈局也有一些按鈕,複選框和一個gridview,但我最感興趣的找出我怎麼會有我的標籤是這樣的,因爲默認情況下,他們是這個樣子:
我的問題是,我不知道如何做到這一點,我之前已經爲一些UI組件繪製了drawable,但我認爲這是不同的。
我想創建一個標籤(可能使用TabHost)的活動,看起來是這樣的:需要幫助創建一個自定義TabHost
這種佈局也有一些按鈕,複選框和一個gridview,但我最感興趣的找出我怎麼會有我的標籤是這樣的,因爲默認情況下,他們是這個樣子:
我的問題是,我不知道如何做到這一點,我之前已經爲一些UI組件繪製了drawable,但我認爲這是不同的。
經過相當一段時間,我已經想通過嘗試很多不同的方式來製作標籤,我終於找到了使用帶有ViewPager的TabLayout的方法。
我做了概念驗證,它看起來像這樣:
如果有人有興趣的代碼,這是主要的活動佈局
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10">
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="0.2"/>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
app:tabMode="fixed"
app:tabGravity="fill"
app:tabPaddingStart="2dp"
app:tabPaddingEnd="2dp"
app:tabPaddingTop="2dp"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5.8"/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
的MainActivity.java:
import android.graphics.Color;
import android.net.Uri;
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.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements FirstTabFragment.OnFragmentInteractionListener, SecondTabFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
tabLayout.setSelectedTabIndicatorColor(Color.TRANSPARENT);
viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);
TabLayout.Tab tab = tabLayout.getTabAt(0);
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout_file1, tabLayout, false);
TextView tabTextView = (TextView) relativeLayout.findViewById(R.id.tab_title);
tabTextView.setText(tab.getText());
tab.setCustomView(relativeLayout);
TabLayout.Tab tab2 = tabLayout.getTabAt(1);
RelativeLayout relativeLayout2 = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.tab_layout_file2, tabLayout, false);
TextView tabTextView2 = (TextView) relativeLayout2.findViewById(R.id.tab_title);
tabTextView2.setText(tab2.getText());
tab2.setCustomView(relativeLayout2);
tab.select();
}
@Override
public void onFragmentInteraction(Uri uri) {
}
public class SectionPagerAdapter extends FragmentPagerAdapter {
public SectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FirstTabFragment();
case 1:
default:
return new SecondTabFragment();
}
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "First Tab";
case 1:
default:
return "Second Tab";
}
}
}
}
TabLayout1(TabL ayout2是相同的,但使用shape2)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tab_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@drawable/shape1"
android:textColor="@android:color/white"/>
</RelativeLayout>
形狀僅僅是紅色和藍色的矩形,和片段默認 空片段用相同的顏色作爲背景的形狀。